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 :(得分:4)
除了无效的语法(B->test();
,它应该是b->test();
),第二个也将返回10.
如果相反,你会写:
A* a = new B();
a->test();
它将返回0或10,具体取决于A :: test是否为虚拟。