Указатель на объект класса
class A // Объявление базового класса { public: virtual void VirtMetod1(); // Виртуальный метод void Metod2(); // Не виртуальный метод }; void A::VirtMetod() { cout << "Вызван A::VirtMetod1\n";} void A::Metod2() { cout << "Вызван A::Metod2\n"; } class B : public A // Объявление производного класса {public: void VirtMetod1(); // Виртуальный метод void Metod2(); // Не виртуальный метод }; void B::VirtMetod1() { cout << "B::VirtMetod1\n";} void B::Metod2() { cout << "B::Metod2\n"; } void main() { B aB; // Объект класса B B *pB = &aB; // Указатель на объект класса B A *pA = &aB; // Указатель на объект класса A pA->VirtMetod1(); // Вызов метода VirtMetod класса B pB->VirtMetod1(); // Вызов метода VirtMetod класса B pA->Metod2(); // Вызов метода Metod2 класса A pB->Metod2(); // Вызов метода Metod2 класса B } |
Пример 12.1. Вызов виртуальных методов |
Закрыть окно |
class A // Объявление базового класса
{ public:
virtual void VirtMetod1(); // Виртуальный метод
void Metod2(); // Не виртуальный метод
};
void A::VirtMetod() { cout << "Вызван A::VirtMetod1\n";}
void A::Metod2() { cout << "Вызван A::Metod2\n"; }
class B : public A // Объявление производного класса
{public:
void VirtMetod1(); // Виртуальный метод
void Metod2(); // Не виртуальный метод
};
void B::VirtMetod1() { cout << "B::VirtMetod1\n";}
void B::Metod2() { cout << "B::Metod2\n"; }
void main() {
B aB; // Объект класса B
B *pB = &aB; // Указатель на объект класса B
A *pA = &aB; // Указатель на объект класса A
pA->VirtMetod1(); // Вызов метода VirtMetod класса B
pB->VirtMetod1(); // Вызов метода VirtMetod класса B
pA->Metod2(); // Вызов метода Metod2 класса A
pB->Metod2(); // Вызов метода Metod2 класса B
}