在c++中设置较低层次私有字段的最佳实践
Best practice for setting a lower hierarchy private field in c++
我有以下类:
//file: A.h
class A
{
private:
int num;
public:
A(int num);
void setNum(int num);
int getNum();
};
//file B.h
class B
{
private:
A a;
public:
B(int num);
A getA();
};
类A包含在类b中。类A有一个私有字段'num'。类A有一个公共getter和一个私有字段num的setter。当在类B中构造对象时,它将'num'的值转发给它所包含的对象A。
在我创建对象B(因此也包含对象A)之后,将A.num的值设置为与B上下文不同的值的最佳实践是什么
例如:
// file main.cc
int main()
{
B b(5);
B.getA().setNum(7);
}
谢谢,
在B中定义一个成员函数来设置a的值:
void B::setA(int k) {
a.setNum(k);
}
正如@π α ντα ρ ε ν注释的那样,你的getter A getA()
返回一个时间对象,当超出getA()
的作用域时,该对象将被销毁。因此,您应该使用A &getA()
返回对私有字段a
的引用。然后你可以通过getA()
调用类A的任何公共方法。
更进一步,使用A &getA()
,将客户端控制权交给私有成员,这通常不是一个好主意。也就是说,你可以像使用getA() = A2
一样,用另一个A类的对象来改变你的私有字段a
。您应该添加一个常量版本:const A &getA() const;
因此,只需在B类中添加一个@kiviak回答的方法,我个人认为这是满足您要求的最佳实践。
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 声明没有默认构造函数的字段
- C++内存模型和位字段的最大序列
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- C++ win32 如何使密码字段可选并启用复制和粘贴?
- 如何通过UDP接收QByteArray并将其解析为位字段结构?
- 仅匹配集合中的某些字段
- 结构字段名称与 GDB 中的 STL 数组冲突
- 如何使用位字段将数据从二进制文件复制到结构中?
- 从CSV文件中提取每个条目字段的最佳方法是什么
- 修改Boost多索引项的非索引字段的最佳方法:modify vs mutable
- C# 与 C/C++:我是否需要手动对结构字段进行排序以获得最佳性能
- 在c++中设置较低层次私有字段的最佳实践