2009-07-15 253 views
0
class B{ 
private: 
    void DoSomething(); 
} 

class W{ 
private: 
    class D: public B{ 
    } 

    D d; 
} 

我可以在W類的範圍內調用D的基類中的私有成員函數嗎?繼承問題

+3

家庭作業?爲什麼不編譯它並嘗試? – beggs 2009-07-15 03:05:56

回答

5

沒有。除了擁有它的類以外,您無法從任何地方調用私有成員函數。如果您希望派生類能夠訪問它,請聲明它受保護。

你也可以聲明D是B類的'朋友';這將允許D訪問B.DoSomething()。但是,這種方法通常是不被接受的。

+0

如果DoSomething()是公開的。看來我不能在W的範圍內調用它,對吧? – Kim 2009-07-15 03:09:55

+0

如果您將其聲明爲public,您將可以從B的實例或擴展B的任何類的實例訪問它。但它必須來自該類的實例: B b = new B(); b.DoSomething()。 你不能直接從W. – MadMurf 2009-07-15 03:23:14

1

函數DoSomething只有在聲明爲public或private時纔可以在類之外訪問。除了上面提到的阿里克,繼承的階級可以成爲朋友來實現同樣的目標。

另一種方法是聲明/定義函數爲虛擬的,而不定義子/繼承類的虛擬定義。這樣做,將調用基類的函數定義。

+0

訪問它。[我的答案]第一行中的一個小小的更正,我提到它是「公開還是私人」。它應該是「公開或受保護的」 – 2009-07-15 03:15:02

+2

@Roopesh你可以編輯答案來糾正它,而不是留下評論。只是讓你知道StackOverflow提供了這個選項。 – MadMurf 2009-07-15 03:18:37

1

不,如果您使用保護關鍵字,那麼你可以。它是一個嵌套類的事實是無關緊要的。