2012-03-27 38 views
3

是否有可能在子方法中「重用」父方法並添加功能,就像使用Java中的超級運算符一樣?Super for C++?

parent.method(int a){ 
    a++; 
} 

child.method(int a /*would be nice w/out*/){ 
    printf("%d",a); 
} 

我知道這可能是一個很基本的問題,對此很抱歉。

順便說一句:我知道我可以將方法複製/粘貼到子類並通過重載在其中添加功能;我正在尋找更方便的方法。

感謝4的幫助

回答

6

您可以使用__super要做到這一點,但它是一個Microsoft擴展。

void CChild::function(int nParam) 
{ 
    __super::function(nParam); 
} 

或者你可以顯式調用從派生類中的基本實現:

void CChild::function(int nParam) 
{ 
    CParent::function(nParam); 
} 
+1

'如果有多重繼承,右__super'將無法正常工作?無論如何,即使微軟提供了一個* super *關鍵字,'CParent :: function'方法也是非常優秀的,而諷刺的是它不是*優越的*。 ;-) – Nawaz 2012-03-27 09:13:58

+0

@Nawaz同意,如果沒有別的,它是一個標準的做法。 ;-) – Konrad 2012-03-27 09:18:37

+0

你可以使用'typedef CParent super;'然後'super :: function(nParam);' – 2012-03-27 10:47:34

6

您可以通過使用的名稱qualifing成員函數名調用的子成員函數父成員函數父類:

void child::method() 
{ 
    parent::method(); 
} 
4

是的,沒有super關鍵字,但你只要給父類的名稱來代替。

int child::method(int a){ 
    // call base class 
    int i = parent::method(a); 
    printf("%d",a); 
} 
1
parent.method(int a){ 
    a++; 
} 

child::method(int a /*would be nice w/out*/){ 
    printf("%d",a); 
    parent::method(a); 
}