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();、2番目の構文も10を返します。

代わりにあなたが書いたとしたら:

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

A :: testが仮想であるかどうかに応じて、0または10を返します。

于 2013-02-12T19:29:09.473 に答える