2013-05-02 72 views
1

我想嘗試C++中的構造函數繼承,它工作正常。但後來我發現我無法真正調用女兒的實例。 Visual Studio中說無法從子實例調用基類的公共方法

方法母親:: ShowName不可

即使它是公共的,其中就我個人而言必須是可以從子類。有什麼我做錯了嗎?

class Mother{ 

protected: 
    char* name; 

public :  
    Mother(char* _name){ 
     name = _name; 
    } 

    void ShowName(){ 
     cout << "my name is: " << name << endl; 
    } 
}; 


class Daughter : Mother{ 
public: 
    Daughter(char* _name) : Mother(_name) { 
    } 
}; 

int main(){ 
    Daughter d1("Masha"); 
    d1.ShowName(); 

    return 0; 
} 
+0

第一類必須在非資本有一個工作的例子 – thewhiteambit 2013-05-02 15:35:52

+0

這是正確的,當我複製它意外改變爲資本。 – msgmaxim 2013-05-02 15:40:36

回答

15

class Daughter : Motherprivate繼承。 class繼承默認情況下是這樣的。

class Daughter : public Mother是你在找什麼。

+0

謝謝!來自C#,只是開始看到差異。 – msgmaxim 2013-05-02 15:37:40

4

您需要使用public繼承:

class Daughter : public Mother 
2

您需要繼承使用訪問說明符公共媽媽類。默認情況下,C++將其視爲私有。

2

正如Grigore指出的那樣,您應該明確添加'public'。

FYI,C++標準解決如下:

在沒有訪問說明符爲基類的,則假定爲公共當派生的類與類密鑰struct和私人定義假定當類是用class-key類定義的。

相關問題