Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP / lectures / 1_oop.ppt
Скачиваний:
54
Добавлен:
03.03.2016
Размер:
546.3 Кб
Скачать

Пример. Порядок вызова конструкторов

class First

{

public:

First(){printf("Конструктор First\n");}

};

class Second: public First

{

public:

Second(){printf("Конструктор Second\n");}

};

class Third: public Second

{

public:

Third(){printf("Конструктор Third\n");}

};

int main() { Third t;

return 0;

}

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

First::First()

Second::Second()

Third::Third()

Порядок вызова деструкторов

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

Пример. Порядок вызова деструкторов

class First

{

public:

~First(){printf("Деструктор First\n");}

};

class Second: public First

{

public:

~Second(){printf("Деструктор Second\n");}

};

class Third: public Second

{

public:

~Third(){printf("Деструктор Third\n");}

};

int main() { Third t; return 0;

}

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

Third::~Third()

Second::~Second()

First::~First()

Разрешение области видимости

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

Пример.

class A {public:

int fun() {return 1;}

};

class B : public A {public:

int fun() {return 2;}

};

int main()

{A a; B b;

int i = a.fun(); // i=1

int j=b.fun(); // j=2

}

Вэтом случае компилятор действует по следующему алгоритму: если имя в базовом классе переобъявляется в производном, то имя в производном классе подавляет соответствующее имя в базовом.

ВС++ можно заставить компилятор «видеть» за пределами текущей области видимости с помощью оператора разрешения видимости.

Общая форма этого оператора:

<имя класса>::<идентификатор из класса>

Пример 1. Обращение к методу базового класса из метода производного

class B : public A {public:

int fun() {return 2;}

int fun1() {return A::fun();}

};

Пример 2. Обращение к методу базового класса для объекта производного класса

B obj; printf("%d\n",obj.A::fun());

Соседние файлы в папке lectures