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 是否是虚拟的。
关于c++ - C++ 基类的成员真的需要是虚拟的才能被派生类覆盖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14840147/