ВУЗ:
Составители:
Рубрика:
107
};
class Derived: public Base {
Base b;
string s;
public:
Derived (char*, int);
~Derived ();
. . .
};
Перед обращением к собственно конструктору класса Derived
необходимо, во-первых, создать подобъект типа Base, во-вторых, члены
b и s. Поскольку для их создания нужно обратиться к конструкторам
соответствующих классов, мы должны им всем передать необходимые
списки аргументов:
Derived::Derived (char *st, int len): Base (len), b (len+1), s (str) {…}
В этом случае при создании объекта типа Derived сначала будет
создан подобъект типа Base. При этом будет вызван конструктор
Base::Base() с аргументом len. Затем будут созданы объекты b и s в
том порядке, в котором они указаны в определении класса Derived. По-
сле этого будет выполнен конструктор Derived::Derived(). Деструкторы
будут вызваны в обратном порядке.
19.5. Преобразования типов
Объект производного типа может рассматриваться как объект его
базового тип. Обратное неверно. (Кошка есть млекопитающее, но не
любое млекопитающее есть кошка.) Компилятор может неявно выпол-
нить преобразование объекта производного типа к объекту типа базово-
го:
class Base {…};
class Der: public Base {…};
Der derived;
Base b = derived;
Обратное преобразование – Base к Der – должно быть определено
программистом:
Der tmp = b; // Ошибка, если для Der
// не определён конструктор Der (Base).
Страницы
- « первая
- ‹ предыдущая
- …
- 103
- 104
- 105
- 106
- 107
- …
- следующая ›
- последняя »
