C++   ::   Хилл Мюррей

Страница: 322 из 357

5.3 Производные Классы

В конструкции

сост идентификатор : public opt typedef-имя

typedef-имя должно означать ранее описанный класс, назваемый базовым классом для описываемого класса. Говорится, что последний выводится из предшествующего (является проиводным от него). По поводу смысла public см. #8.5.9. На члены базового класса можно ссылаться так, как если бы они были членами производного класса, за исключением тех случаев, кода имя базового члена было переопределено в производном класе; в этом случае для ссылки на скрытое имя можно использвать операцию :: (#7.1). Производный класс сам может использоваться в качестве базового класса. Невозможно стристь производные от union (#8.5.13). Указатель на производный класс может неявно преобразовываться в указатель на открытый

базовый класс (#6.7).

Для объектов класса, производного от класса, для которго была определена operator= (#8.5.11), присваивание неявно не определено (#7.14 и #8.5)

Например:

class base (* int a, b; *);

class derived : public base (* int b, c; *);

derived d;

d.a = 1; d.base::b = 2; d.b = 3; d.c = 4;

осуществляет присваивание четырем членам d.



8.5.4 Виртуальные Функции

Если базовый класс base содержит virtual (виртуальную) (#8.1) функцию vf, а производный класс derived также содержит функцию vf, то обе функции должны иметь один и тот же тип, и вызов vf для объекта класса derived вызывает derived::vf. Например:

struct base (* virtual void vf (); void f (); *);

class derived : public base (* void vf (); void f (); *);

derived d; base* bp = amp;d; bp-»vf(); bp-»f();

Вызовы вызывают, с�

|< Пред. 320 321 322 323 324 След. >|

Java книги

Контакты: [email protected]