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

时间:2015-07-16 07:01:28

标签: c++ oop

我必须关注课程:

//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类有一个公共吸气剂和一个私人领域的设定者#num;#39;。在B类中构造一个对象时,它会转发' num'到它包含的对象A.

在创建对象B(因此也包含对象A)之后,将A.num的值设置为与B的上下文不同的值的最佳做法是什么。

例如,这似乎不起作用:

// file main.cc
int main()
{ 
    B b(5);
    B.getA().setNum(7);
}

谢谢,

2 个答案:

答案 0 :(得分:4)

在B中定义成员函数以设置A:

的值
void B::setA(int k) {
    a.setNum(k);
}

答案 1 :(得分:2)

如同@πάνταῥεῖ所评论,你的getter A getA()返回一个临时对象,当它超出getA()的范围时将被销毁。因此,您应该使用a返回对私有字段A &getA()的引用。然后你可以通过getA()调用任何公共方法A.

更进一步,使用A &getA(),让客户控制您的私人会员,这通常不是一个好主意。也就是说,可以使用a将另一个A类对象更改为私有字段getA() = A2。您应该添加一个常量版本:const A &getA() const;

因此,只需在B级添加一个方法,因为@kiviak回答,我个人认为,这是满足您要求的最佳方法。