nacast(Security* s) { return (
Автор admin
Воскресенье, 14 июня 2009 11:32
nacast(Security* s) { return (s->isA(TYPEID)) ? static_cast(s) : 0; } }: int mainO { vector portfolio: portfolio.push_back(new Metal); portfoliо.push_back(new Investment): portfolio.push_back(new Bond); portfolio.push_back(new Stock); for (vector:iterator it = portfolio.begin(); it != portfolio.endO; ++it) { Investment* cm = Investment::dynacast(*it): if(cm) cm->special(); else cout « “not a Investment” « endl; } cout « “cast from intermediate pointer:\n”; Security* sp = new Metal; Investment* cp = Investment::dynacast(sp): if(cp) cout « ” it’s an Investments”; Metal* mp = Metal::dynacast(sp); if(mp) cout « ” it’s a Metal too!\n”: purge(portfolio): } ///:- Полиморфная функция isA() проверяет совместимость своего объекта с аргументом типа (id). Это означает, что id совпадает с typelD самого объекта либо одного из его предков (отсюда и вызов Super::isA()). Функция dynacastQ, статическая во 428 Глава 8 • RTTI всех классах, проверяет допустимость преобразования, вызывая функцию isA() для своего аргумента-указателя. Если isA() возвращает true, значит, преобразование допусти
Комментарии закрыты.
Последние комментарии