[英]In Inheritance: Can I override base class data members?
假設我有兩個類,如下所示:
Class A
{
public:
..
private:
int length;
}
Class B: public Class A
{
public:
..
private:
float length;
}
我想知道的是:
有一個類滿足我的需求,我想重用它。 但是,對於我的程序需求,其數據成員應該是另一種類型。
我有一些書,但它們都只是指覆蓋基類成員方法。
您可以使用模板化成員,即通用成員,而不是覆蓋成員。
您也可以聲明VARIANT(COM)之類的聯合。
struct MyData
{
int vt; // To store the type
union
{
LONG lVal;
BYTE bVal;
SHORT iVal;
FLOAT fltVal;
.
.
}
};
1)不,你不能。 您可以創建自己的內部/隱藏/私有成員,但不能覆蓋它們。
2)如果可以,那不是一個好習慣。 想一想;)
3)你不應該,因為你正在改變成員的意思。
雖然在派生類中聲明具有相同名稱的數據成員是合法的C ++,但它可能不會按照您的意圖執行。 在您的示例中,類A中的任何代碼都不能查看float length
定義 - 它只能訪問int length
定義。
只有方法可以在C ++中具有虛擬行為,而不是數據成員。 如果要將現有類重用為其他數據類型,則必須使用所需的數據類型重新實現該類,或者將其重新實現為模板,以便在實例化時提供所需的數據類型。
1)是的,它是允許的,就像你可以做到的那樣
2)不! 糟糕的做法。 如果有人調用使用'length'的方法,則返回的變量將是未定義的。
3) 嘗試不同的設計 。 也許你想擁有一個類似命名的函數或者使用baseclass作為“has-a”類而不是“is-a”類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.