полиморфизм — действительно ли член базового класса C ++ должен быть виртуальным, чтобы быть переопределенным производным классом?

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) стоят первыми!
Что здесь происходит?

0

Решение

Помимо неверного синтаксиса (B->test(); где это должно быть b->test();), второй также вернет 10.

Если бы вместо этого вы написали бы:

A* a = new B();
a->test();

Он бы возвратил 0 или 10 в зависимости от того, является ли A :: test виртуальным.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]