2015-06-28 53 views
0
Class Dad{ 

    public: 
     Dad(); 
     Dad(char v){Dad_value = v;} 

    private: 
     char Dad_value; 
}; 

class Child :public Dad{ 

    public: 
     Child(); 
     Child(short v1, short v2, char v):Dad(v){Child_v1 = v1; Child_v2 = v2;} 

    private: 
     short int Child_v1; 
     short int Child_v2; 
}; 

//--------------------------------------- 

//define a Child array: 
Child bd[100]; 

for (int i =0; i<100;i++){ 

    bd[i] = Child(a,b,c); 

} 

a b c從文件中讀取,兩個短和一個字符。如何簽署bd [i]。我試過重載「=」,但如何處理基類的一部分,這是私人的爸爸類。C++如何基於相同類型的臨時對象的值簽署派生類對象?

謝謝。

+3

您的代碼應該按書面形式工作。編譯器生成的賦值運算符會做正確的事情。你覺得這個問題具體是什麼? –

+0

不清楚你問什麼。請更改(不使用Google翻譯)。或者舉一個你想在僞代碼中實現的例子? – Elyasin

+0

「sign」是指「分配」嗎? –

回答

0

您還需要在Dad類中聲明operator=(Dad& other){...}。然後從你的子類中調用它。像這樣:

class Child{ 
    Child& operator=(Child& other){ 
    Dad::operator=(other); 
    //more assignments 
    }; 

這是因爲你聲明瞭Dad s變量private,這意味着它是不允許被任何不是Dad::method()進行修改。通常當事情是私人的時候,它有一個很好的理由;即。你不需要改變它,或者有更好的方法來做到這一點。
如果您確實想讓您的Child修改Dad的變量,您可以在Dad中設置變量protected

+1

您認爲編譯器生成的賦值運算符有什麼錯誤? –

+0

無論你認爲這是在解決什麼問題,OP不需要什麼問題。編譯器生成的賦值運算符應該處理這個問題。正如伊戈爾在綜合評論中所說的那樣,假設其餘的構造函數按照聲明正確實現,那麼代碼應該是可行的。 – WhozCraig

+0

謝謝。因爲我需要宣佈爸爸變量私人,我一整天都在掙扎。和爸爸::運營商=(其他);是我需要的。在我打電話給「爸爸操作員=」後,我的程序將運行良好。非常感謝,夥計。 – justicewang

相關問題