При создании объекта конструкторы вызываются в следующем порядке: — КиберПедия 

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

При создании объекта конструкторы вызываются в следующем порядке:

2019-08-07 115
При создании объекта конструкторы вызываются в следующем порядке: 0.00 из 5.00 0 оценок
Заказать работу

1) Конструкторы базовых классов, если класс для создаваемого объекта является наследником других классов в порядке их появления в описании класса. Если в списке инициализации описываемого класса присутствует вызов конструктора преобразования (или конструктора с двумя и более параметрами) базового класса, то вызывается конструктор преобразования (или конструктор с двумя и более параметрами), иначе вызывается конструктор умолчания базового класса.

2) Конструкторы умолчания всех вложенных информационных членов, которые не перечислены в списке инициализации, и конструкторы преобразования, копирования и конструкторы с двумя и более параметрами всех вложенных информационных членов, которые перечислены в списке инициализации. Все перечисленные в данном пункте конструкторы (умолчания, преобразования, копирования, с двумя и более параметрами) вызываются в порядке описания соответствующих информационных членов в классе.

3) Собственный конструктор. Такая последовательность вызова конструкторов логически обосновывается тем, что в момент выполнения собственного конструктора все информационные поля должны быть уже проинициализированы.

Деструкторы вызываются в обратном порядке:

1) Собственный деструктор. В момент начала его работы поля класса еще не очищены, и их значения могут быть использованы в теле деструктора.

2) Деструкторы вложенных объектов в порядке, обратном порядку их описания.

3) Деструкторы базовых классов в обратном порядке их задания.

Перегрузка функций

Имеется возможность описывать разные алгоритмы для одного и того же идентификатора функции при разных количествах и наборах типов входных параметров. Такое описание разных алгоритмов в одной зоне описания (класс, пространство имен) называется перегрузкой функций (если описание разных алгоритмов для одного и того же имени осуществляется в разных зонах, то говорят о перекрытии).

При вызове функции для выбора подходящей перегруженной функции выполняется следующий алгоритм:

Алгоритм поиска оптимально отождествляемой функции

1) Отбираются функции с необходимым количеством формальных параметров.

Описания, содержащиеся в библиотечном файле  <cstdarg>, становятся доступными после его подключения директивой препроцессора #include <cstdarg>.

 Такой метод используется при передаче списка строковых параметров из командной строки вызова программы на исполнение:

  int main(int argc, char * argv[])

Здесь args – количество строковых параметров в командной строке вызова программы на исполнение, включая идентификатор программы.

2) Для каждого фактического параметра вызова функции строится множество функций, оптимально отождествляемых по этому параметру (best matching)

3) Находится пересечение этих множеств

4) Если полученное множество состоит из одной функции, то вызов разрешим. Если множество пусто или содержит более одной функции, то генерируется сообщение об ошибке.

Пример:

class x{

...

public:

x(int i1){... }

...

};

class y{...};

 void f(x x1, int i1){...}

void f(x x1, double d1){...}

 void f(y y1, double d1){...}

void g(){... f(1,1)...} // вызов первой реализации

f(x, int)

Пример:

class x{

 ...

 public:

 x(int i1){... }

 ...

};

void f(x x1, int i1){...}

void f(int i1, x x1){...}

 void g(){... f(1,1)...} // ошибка: пересечение // множеств – пусто.

 

Закрытое (private) наследование

 Закрытые члены базового класса недоступны напрямую с использованием дополнительных методов класса-наследника (при любом способе наследования). Работа внутри класса-наследника с такими получаемыми закрытыми членами базового класса возможна только с использованием открытых и защищенных методов базового класса.

Закрытые и защищенные получаемые методы недоступны для манипулирования с объектом вне класса. Они могут использоваться как подпрограммы другими методами класса.

При закрытом наследовании открытые и защищенные члены базового класса (любые) доступны только внутри производного класса и недоступны извне (через объекты производного класса), как и его собственные закрытые члены.

Пример:

class X1{

int ix1;

 public:

 int f1(){... }

 ... };

class Y1: protected X1 {

... };

class Z1: public Y1 {

 ... };

class X2{

protected:

 int ix2;

 public:

int f2(){... }

 ... };

class Y2: X2 {...};

class Z2: public Y2 {...};

Пример: Базовый класс описывает фигуры на плоскости и имеет методы вычисления площади фигур, а класс-наследник описывает объемные тела, например, призмы с основанием – плоской фигурой, описываемой базовым классом. Поэтому в данном случае не имеет смысла наследование методов базового класса для работы с объектами, описываемыми классом-наследником:

 #include <iostream>

 using namespace std;

class twom {

double x,y;

 public:

twom(double x1=1, double y1=1): x(x1), y(y1) {}

 double sq(){

return x*y; } };

class thm: private twom {

double z;

public:

 thm(double x1 = 1, double y1 = 1,

double z1 = 1):twom(x1,y1), z(z1){}

double vol(){return sq()*z;} };

int main(){

thm t1(1,2,3);

double d1;

d1 = t1.vol();

cout << "vol= " << d1 << '\n';

return 0; }

 


Поделиться с друзьями:

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.015 с.