2012-03-28 222 views
1
class C1 { 
    void A(); 
    void B(); 
} 

void C1::A(){ return B(); } 

class C2 : public C1 { 
    void B(); 
} 

C2 *obj = new C2; 
obj->A(); // returns B() from C1 

調用子類的功能爲什麼B()從C1叫什麼名字?如何使A()僅在C1中存在並從C2中調用B()?繼承。從父類

+0

你不需要在'C2'中的'C2'之後寫'()' – Shahbaz 2012-03-28 13:28:19

+0

@Shahbaz - fixed) – Eddie 2012-03-28 13:29:40

回答

7

您需要製作B()C1 a virtual功能。

虛擬函數是基本功能於對象的初始化是拿自己的價值指針。如果您new C1,函數指針將指向C1::B而如果你new C2該函數指針將指向C2::B

注:要了解更多有關virtual及相關學科,搜索功能覆蓋多態性

+0

是的,這正是'virtual'關鍵字的作用。 – MrTJ 2012-03-28 13:26:18

+0

啊,就這麼簡單..)謝謝! – Eddie 2012-03-28 13:27:07

2

會員的方法不是virtual默認在C++(你來自Java的)?

當你寫:

class C1 { 
    void A(); 
    void B(); 
} 

class C2 : public C1 { 
    void B(); 
} 

你不C2覆蓋B(),但隱藏它。

若要覆蓋它,您必須在基類中聲明它爲virtual虛擬在後續的類中是不必要的)。