int main() { std::srand(std::time(0)); Grand * pg; Superb * ps; for (int i = 0; i < 5; i++) { pg = GetOne(); cout << "Now processing type " << typeid(*pg).name() << ".\n"; pg->Speak(); if (ps = dynamic_cast<Superb *>(pg)) ps->Say(); if (typeid(Magnificent) == typeid(*pg)) cout << "Yes, you're really magnificent.\n"; } return 0; }
int _tmain(int argc, _TCHAR* argv[]) { //запускаем генератор случайных чисел std::srand(std::time(0)); //создаем указатели на базовый класс и первого наследника Grand * pg; //указатель на первого наследника необходим для вызова метода Say Superb * ps; for (int i = 0; i < 5; i++) { //создаем объект и получаем указатель, работаем через указатель базового класса pg = GetOne(); //вызываем метод Speak pg->Speak(); //пытаемся привести указатель базового класса к указателю на первого наследника //для вызова метода Say //метод Say для объекта базового класса не вызывается (его нет в базовом классе) if (ps = dynamic_cast<Superb *>(pg)) ps->Say(); } std::cin.get(); return 0; }