在c++中设置较低层次私有字段的最佳实践

Best practice for setting a lower hierarchy private field in c++

本文关键字:字段 最佳 层次 c++ 设置      更新时间:2023-10-16

我有以下类:

//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回答的方法,我个人认为这是满足您要求的最佳实践。