2017-07-02 145 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 
    } 
}; 
相关问题