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

c++ - 仅授予某些派生类访问基类中的成员函数的权限-LMLPHP

现在,假设我需要在A1中定义的成员函数。是否可以使成员函数对B1和B2不可访问但对C1可访问?如果成员函数受保护或为公共函数,那么B1和B2仍然可以访问它,因此不起作用。如果它是私有的,那么C1将无法访问它,因此这是行不通的,所以我有点卡在这里。我对C ++仍然缺乏经验,并且不确定在这种情况下是否可以使用Friend函数或Friend类。如果没有,那有可能吗?

最佳答案

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

话虽如此,从技术上讲,您可以考虑让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
    }
};

关于c++ - 仅授予某些派生类访问基类中的成员函数的权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44874168/

10-11 19:37
查看更多