派生關係中的重名成員的處理(二義性問題)
阿新 • • 發佈:2019-02-13
前面我們介紹了派生與繼承關係,它們把不同的類聯絡在了一起,很容易就產生了一個重名成員的處理問題,我們稱之為“派生關係中的二義性問題”。下面分幾種情形來介紹:
1.基類與派生類間重名成員的處理
規則:重名成員不加類名限定預設是派生類成員;要訪問基類重名成員則要採用類名限定的方法。
2.多重繼承情況下基類重名成員的處理
規則:重名成員不加類名限定預設是派生類成員;要訪問基類重名成員則要採用類名限定的方法。(同上)
3.多級混合繼承(非虛擬繼承)情況下“爺爺類”重名成員的處理
規則:重名成員不加類名限定預設是派生類成員;要訪問基類重名成員則要採用類名限定的方法。(同上)
對最底層的派生類而言,如果父類和“爺爺類”都有同名成員,訪問“爺爺類”會出現一些錯誤,詳見多級繼承中同名成員的訪問。因此這裡我們只討論簡單的情況,即“爺爺類”和子類有重名成員的情況。
4.多級混合繼承(虛擬繼承)情況下“爺爺類”只有一個,不會出現重名成員的情況,無需進行處理
方法:將“爺爺類”定義為虛基類,各派生類物件共享其同一個“爺爺”。這種繼承稱為共享繼承。
class A{...};
class B: virtual public A{...};
class C: virtual public A{...};
class D: public B, public C{... };