給定一個派生自 Faculty 類的 Teacher 類,我將如何處理 Teacher 物件的名稱,該物件被定義為 Faculty 中的私有成員,而不是 Teacher 中的私有成員,以進行復制控制?
// example code for the two classes
class Faculty{
public:
/* constructor
copy constructor
destructor
assignment operator
*/
string get_name() const{
return name;
private:
string name;
};
class Teacher : public Faculty{};
假設 Faculty 類具有正常作業的復制控制
// Copy constructor
Teacher(const Teacher& rhs) : Faculty(rhs){
name = rhs.name;
}
此行無法編譯,因為它試圖訪問 Faculty 的私有成員。是否需要此行,或者副本的名稱是否已由初始化串列 Faculty(rhs) 設定為 rhs.name?如果我直接在教師的私有欄位中定義一個字串名稱,可以訪問名稱嗎?
// Assignment operator
Teacher& operator=(const Teacher& rhs){
Faculty::operator=(rhs);
if(this != &rhs){
name = rhs.name; // same issue
}
return *this;
}
與復制控制相同的問題,這是需要的還是名稱已被學院班級的分配操作員更改為 rhs.name?
uj5u.com熱心網友回復:
是否需要此行,或者副本的名稱是否已由初始化串列 Faculty(rhs) 設定為 rhs.name?
不,不需要該行(假設默認或正確實作的Faculty復制建構式)。建構式將為您正確Faculty分配或初始化name。
如果我直接在教師的私有欄位中定義一個字串名稱,可以訪問名稱嗎?
是的,有點。但它將是一個完全獨立的實體name。你不想這樣做。你只想name定義一次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/459966.html
上一篇:如何從c 中的另一個類獲取向量
下一篇:魔術吸氣劑繼承
