我必须关注课程:
//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);
}
谢谢,
答案 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回答,我个人认为,这是满足您要求的最佳方法。