ciber_man
> -> 550 страниц
http://cm.bell-labs.com/cm/cs/who/dmr/ctut.pdf
Керниган уложился в 24 страницы крупными буквами.
Pokimon
только этот стандарт уже никем и нигде не поддерживается...
lagartos
> Не получается.
И не получится, лол, переопределяется только для потомка.
Найди отличие:
Здесь..
class A { public: A() {} virtual ~A( ) = 0 {} virtual A *copy( ) = 0; }; class B : public A { public: B( ) {} ~B( ) {} A *copy( ) { return this; } }; int main( int argc, char **argv) { B *b1 = new B, *b2 = dynamic_cast<B *>( b1->copy( )); return 0; }
..и здесь
class A { public: A() {} virtual ~A( ) = 0 {} virtual A *copy( ) = 0; }; class B : public A { public: B( ) {} ~B( ) {} B *copy( ) { return this; } }; int main( int argc, char **argv) { B *b1 = new B, *b2 = b1->copy( ); return 0; }
cptAm
Понял, спс.
cptAm
Разве dynamic_cast<B *> необходимо?
Voltt
> Разве dynamic_cast<B *> необходимо?
От предка к потомку же приводим тип. В той строчке.
cptAm
Но если мы точно знаем, что это потомок, можем ограничиться static_cast, и даже так писать:
*b2 = b1->copy();
Что позволяет организовать виртуальный конструктор. Разве не?
Voltt
> Но если мы точно знаем, что это потомок, можем ограничиться static_cast
Если мы переопределим тип возвращаемого значения у виртуального метода copy, надобность в каком-либо cast'е отпадает вовсе. Что мой пример продемонстрировать был призван :) Когда работа ведется непосредственно с потомком, приведение типов ни к чему.
И мы таки сможем писать так:
*b2 = b1->copy();
cptAm
Собственно это я и хотел услышать :)
Тема в архиве.