From Rycharg:
--------------------------------------------------------------
Позвольте не согласится с Вами, Romeo.в конструкторах нельзя вызывать виртуальные функции
Код: Выделить всё
class foo{
public:
virtual void blabla(){ cout << "bla"; }
foo(){}
};
class foo2 : public foo{
public:
virtual void blabla(){ cout << "blablablabla"; }
foo2() { this->foo::blabla(); }
};
From Romeo:
--------------------------------------------------------------
Код: Выделить всё
foo2() { this->foo::blabla(); }
Код: Выделить всё
class A
{
public:
A(int i) : m_i(0) { i = GetI(); }
virtual int GetI() = 0;
protected:
int m_i;
};
class B : public A
{
public:
virtual int GetI() { return SpecificForBValue(); }
...
};
--------------------------------------------------------------
From BBB:
--------------------------------------------------------------
Romeo, знаешь, у меня ощущение, что это не регламентировано стандартом. Т.е. это "компилятор-депенденд". Да, в Борланде и Микрософт, если мы сделает в конструкторе предка вызов виртуального метода, то при создании потомка, у которого этот виртуальны метод переопределен, будет вызван, тем-не менее виртуальный метод предка.Romeo писал(а):Абсолютно согласен с претензиями. Я не ошибся, а высказался неверно. Я имел ввиду, что в конструкторах не работает механизм виртуальности.Код: Выделить всё
foo2() { this->foo::blabla(); }
Но вот в TopSpeed C++ (с которым мне когда-то приходилось сталкиваться) из констуктора предка, таки, вызывался виртуальный метод потомка!