簡體   English   中英

在繼承中:我可以覆蓋基類數據成員嗎?

[英]In Inheritance: Can I override base class data members?

假設我有兩個類,如下所示:

Class A
{
public:
..
private:
  int length;
}

Class B: public Class A
{
public:
..
private:
 float length;
}

我想知道的是:

  1. 是否允許覆蓋基類數據成員
  2. 如果是的話,這是一個好習慣嗎?
  3. 如果不是,擴展類的數據成員類型的最佳方法是什么?

有一個類滿足我的需求,我想重用它。 但是,對於我的程序需求,其數據成員應該是另一種類型。

我有一些書,但它們都只是指覆蓋基類成員方法。

您可以使用模板化成員,即通用成員,而不是覆蓋成員。

您也可以聲明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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM