class A {
public:
virtual int test()=0;
};
class B : public A {
public:
int test(){return 10;}
};B *b = new B();
b->test(); // would return 10;
в то время как:
class A {
public:
int test(){return 0;}
};
class B : public A {
public:
int test(){return 10;}
};B *b = new B();
b->test(); // **would return 0**;
Почему это возвращается «0«здесь? Это имеет для меня нулевой смысл, потому что я предполагаю, что (перегруженные) члены производного класса (B) стоят первыми!
Что здесь происходит?
Помимо неверного синтаксиса (B->test();
где это должно быть b->test();
), второй также вернет 10.
Если бы вместо этого вы написали бы:
A* a = new B();
a->test();
Он бы возвратил 0 или 10 в зависимости от того, является ли A :: test виртуальным.
Других решений пока нет …