2008-10-27 144 views
3

當你有一個派生類,是有指從比其他的方法給一個變量的簡單的方法:有沒有簡單的方法來使用基類的變量?

BaseClass::variable 

編輯
由於恰巧,我發現,解釋了這個問題一個頁面使用功能代替: Template-Derived-Classes Errors。顯然,使用模板類時會有所不同。

+0

你可以把你的問題更具體,這樣你說明,它涉及到模板派生類的事實呢?謝謝。 – 2008-10-27 20:25:45

回答

10

如果基類成員變量是受保護的或公共的,則只能在派生類的任何成員函數中通過名稱引用它。如果它對於基類是私有的,編譯器將不會讓派生類訪問它。例如:


class Base 
{ 
protected: 
    int a; 

private: 
    int b; 
}; 

class Derived : public Base 
{ 
    void foo() 
    { 
    a = 5; // works 
    b = 10; // error! 
    } 
}; 

還有一點可以說是保持所有成員變量都是私有的,並根據需要提供getter和setter。

此外,提防「隱藏」數據成員:


class Base 
{ 
public: 
    int a; 
}; 

class Derived : public Base 
{ 
public: 
    int a; 
}; 

這將創建一個名爲a兩個變量:一個在Base,在Derived之一,它可能會導致混亂和錯誤。

+0

只是爲了澄清,訪問基類的私有成員將導致編譯器錯誤。編譯器不會忽略它並尋找另一個匹配。 – KeithB 2008-10-27 19:18:20

相關問題