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