2017-07-02 140 views
0

假設我有四個類,A1,B1,B2和C1。 A1是基類,B1和B2從A1公開繼承,C1從B1和B2公開繼承。 B1和B2是虛擬類。只給一些派生類訪問基類的成員函數

Example

現在,假設我需要在A1中定義的成員函數。 是否有可能使B1和B2無法訪問成員函數,但C1可訪問?如果成員函數受保護或公開,那麼B1和B2仍然可以訪問它,所以這是行不通的。如果它是私人的,那麼C1無法訪問它,所以這是行不通的,所以我有點卡在這裏。我在C++方面還很缺乏經驗,而且我不確定在這種情況下朋友功能或朋友類是否有意義。如果不是,這甚至有可能嗎?

+1

在'A1':'朋友C1級;' – aschepler

+0

請你解釋你爲什麼這麼認爲?一般來說,我還是新手,我願意學習。 – JohnTravolski

+0

你可以提供任何需要的上下文嗎?如果存在B1和B2不應具有但C1應該具有的行爲,爲什麼他們首先繼承了A1? – Aziuth

回答

1

從設計角度來看,這樣的要求看起來相當可疑。

有了這樣說,在技術上可考慮作CA的朋友:

class C; 

class A 
{ 
private: 
    int m_x = 0; 
    friend class C; 
}; 

class B : public A 
{ 
private: 
    void f() 
    { 
     m_x = 1; //error 
    } 
}; 

class C : public B 
{ 
private: 
    void g() 
    { 
     m_x = 1; //ok 
    } 
}; 
相關問題