int main(void) { std::srand(std::time(0)); Grand *pg; Superb *ps; for(int i=0;i<5;i++) { pg=GetOne(); pg->Speak(); if((ps=dynamic_cast<Superb *>(pg))!=NULL) ps->Say(); } return 0; }
int main() { std::srand(std::time(0)); Grand * pg; Superb * ps; for (int i = 0; i < 5; ++i) { pg = GetOne(); pg->Speak(); if (ps = dynamic_cast<Superb *> (pg)) { ps->Say(); } } return 0; }
int main() { std::srand(std::time(0)); Grand * pg; Superb * ps; for (int i = 0; i < 5; i++) { pg = GetOne(); pg->Speak(); if( ps = dynamic_cast<Superb *>(pg)) ps->Say(); } // std::cin.get(); return 0; }
int main() { srand(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; }