友谊:来自同一家长的许多课程
friendship: many classes from same parent
如何在所有派生类中不friend
的情况下达到privateMember
?
class parent{...}; //a virtual class
class A: public parent{...};
class B: public parent{...};
class C: public parent{...};
class D: public parent{...};
class E: public parent{...};
...
//each has a function, that want access to privateMember
class MyClass{
int privateMember;
friend parent;
//I know it doesnt't work, but this shows the best what I want
}
保持原样(带friend class parent
)并添加一个访问器函数来parent
该A
,B
,...将使用。它将受到保护,因此层次结构外部的函数无法使用它。
class parent {
protected:
static int& getPrivate( MyClass & c ) { return c.privateMember; }
...
};
您必须这样做,因为友谊不会扩展到派生类。
你可以创建一个getter函数,它将返回一个privateMember:
int getPrivateMember() const { return privateMEmber; }
当然,这必须是一种公共方法。
这里的简单答案是不要纠结于其他类的内部状态。相反,请使用他们的公共 API。这样,您就不必担心将自己锁定在实现中,并且可以避免在修改变量时无意中破坏类不变量的各种潜在问题。
相关文章:
- 在混合代码库中将C转换为C++时出现许多包含错误
- 函数在许多数字上转换为基数 1 时减去 2?
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 我想生成许多矩阵并用随机数填充它
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- 在C++管理一家中国.txt
- C++许多 SFINAE 风格的过载
- 擦除许多矢量元素,同时使用'auto'
- 错误:'int'之前的预期主表达式以及代码中的许多类似错误
- 为什么许多项目不提供预编译的二进制文件?
- 如何组合许多连续的图像来模拟逼真的运动模糊?
- QPixmap在Qt中加载了许多图像
- 正确设计具有许多C++常量的项目
- 许多文件描述符在调用sys_clone时
- 我在这个课上做错了什么?
- 对许多字段的元素进行排序
- C++函数调用与许多点运算符
- 我的代码运行良好,但现在当尝试将其制作成模板时,我遇到了许多看似无关的错误。这是怎么回事?
- 具有许多派生类的可重用类的良好设计
- 在constexpr函数中插入许多模板