С++ для начинающих


         

в классе Panda собственный экземпляр


   virtual string isA() const;

   // ...

};

class Endangered {

public:

   virtual ~Endangered();

   virtual ostream& print( ostream& ) const;

   virtual void highlight() const;

   // ...

};

Теперь определим в классе Panda собственный экземпляр print(), собственный деструктор и еще одну виртуальную функцию cuddle():

class Panda : public Bear, public Endangered

{

public:

   virtual ~Panda();

   virtual ostream& print( ostream& ) const;

   virtual void cuddle();

   // ...

};

Множество виртуальных функций, которые можно напрямую вызывать для объекта Panda, представлено в табл. 18.1.

Таблица 18.1. Виртуальные функции для класса Panda





















































Имя виртуальной функции



Активный экземпляр



деструктор



Panda::~Panda()



print(ostream&) const



Panda::print(ostream&)



isA() const



Bear::isA()



highlight() const



Endangered::highlight()



cuddle()



Panda::cuddle()



Когда ссылка или указатель на объект Bear или ZooAnimal инициализируется адресом объекта Panda или ему присваивается такой адрес, то части интерфейса, связанные с классами Panda и Endangered, становятся недоступны:

Bear *pb = new Panda;

pb->print( cout );      // правильно: Panda::print(ostream&)

pb->isA();              // правильно: Bear::isA()

pb->cuddle();           // ошибка: это не часть интерфейса Bear

pb->highlight();        // ошибка: это не часть интерфейса Bear

delete pb;              // правильно: Panda::~Panda()

(Обратите внимание, что если бы объекту класса Panda был присвоен указатель на ZooAnimal, то все показанные выше вызовы разрешались бы так же.)

Аналогично, если ссылка или указатель на объект Endangered инициализируется адресом объекта Panda или ему присваивается такой адрес, то части интерфейса, связанные с классами Panda и Bear, становятся недоступными:

Endangered *pe = new Panda;

pe->print( cout );  // правильно: Panda::print(ostream&)

// ошибка: это не часть интерфейса Endangered


Содержание  Назад  Вперед