2013-09-29 43 views
0

如果我有兩個類,例如像這樣呼喚在C成員對象++一個受保護的方法

class A { 
    ... 
    protected: 
     B* test; 
     aFunction(); 
}; 

class B { 
    ... 
    protected: 
     A* test1; 

    public: 
     bFunction(); 
}; 

我可以做到這一點內部類B的bFunction()

bFunction(){ 
    test1->aFunction(); 
} 

基本上可以,我從不是從該函數派生的類調用某個類的受保護函數?

+4

你爲什麼不試試看? – P0W

+4

只有一個答案:沒有。 –

回答

4

protected的「點」是隻有從基類派生的類可以調用這些函數。

如果您有充分理由這樣做,那麼請將課程設置爲friend,例如,在class A內加friend class B;

1

cplusplus.com

一類的private和protected成員不能從 在聲明它們的同一類外部訪問。但是,這條規則 不影響朋友。

你可以調用保護,從其他類,當那些隱私法「朋友」:

在你的情況,這將是:

Class A { 
    ... 
    protected: 
     B* test; 
     aFunction(); 
    friend class B; 
} 

通常被認爲是不好的做法,但對於緊密耦合的類來說是可以的。

2

建議避免這種不必要的相互依賴。使用朋友功能的必要性通常意味着糟糕的架構。