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

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

Например:

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();

Вызовы вызывают, соответственно, derived::vf и base::f для объекта класса derived, именованного d. Так что интерпртация вызова виртуальной функции зависит от типа объекта, для которого она вызвана, в то время как интерпретация вызова нвиртуальной функции зависит только от типа указателя, обознчающего объект.

Виртуальная функция не может быть другом (friend) (#8.5. 10). Функция f в классе, выведенном из класса, который имеет виртуальную функцию f, сама считается виртуальной. Виртуалная функция в базовом классе должна быть определена. Виртальная функция, которая была определена в базовом классе, не обязательно должна определяться в производном классе. В этом случае во всех вызовах используется функция, определенная для базового класса.



8.5.5 Конструкторы

Функция член с именем, совпадающим с именем ее класса, называется конструктором. Если класс имеет конструктор, то он вызывается для каждого объекта этого класса перед тем, как этот объект будет калибо использован, см. #8.6.

Конструктор не может быть virtual или friend.

Если класс имеет базовый класс или объекты члены с контрукторами, их конструкторы вызываются до конструктора проиводного класса. Первым вызывается конструктор базового класа. Объяснение того, как для таких конструктороу могут специфицироваться параметры , см. в #10, а того, как контрукторы могут использоваться для управления свободной пмятью, см. в #8.5.8.

Объект класса с конструктором не может быть членом обединения.

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

Java книги

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