0
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) 的(某种重载)成员排在第一位!这里发生了什么?

4

1 回答 1

4

除了无效的语法(B->test();应该在哪里b->test();),第二个也将返回 10。

如果相反,您会写:

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

根据 A::test 是否为虚拟,它会返回 0 或 10。

于 2013-02-12T19:29:09.473 回答