仅提供一些派生类访问基类中的成员函数

时间:2017-07-02 18:53:36

标签: c++ class inheritance friend

假设我有四个类,A1,B1,B2和C1。 A1是基类,B1和B2从A1公开继承,C1从B1和B2公开继承。 B1和B2是虚拟类。

Example

现在,假设我需要在A1中定义的成员函数。 是否可以使成员函数无法访问B1和B2但C1可访问?如果成员函数受保护或公开,那么B1和B2仍然可以访问它,因此不会工作。如果它是私有的,那么C1无法访问它,因此它不起作用,所以我有点卡在这里。我在C ++方面仍然缺乏经验,而且我不确定朋友的功能或朋友类在这种情况下是否有意义。如果没有,这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

从设计的角度来看,这样的请求看起来很可疑。

话虽如此,从技术上讲,您可以考虑让C成为A的朋友:

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
    }
};
相关问题