我要上几节课:
//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”的设置器。在B类中构造对象时,它将'num‘的值转发给它包含的对象A。
在我创建对象B (因此也是包含的对象A)之后,将A.num的值设置为与B的上下文不同的值的最佳实践是什么?
例如,这似乎不起作用:
// file main.cc
int main()
{
B b(5);
B.getA().setNum(7);
}谢谢,
发布于 2015-07-16 07:09:22
在B中定义一个成员函数来设置A的值:
void B::setA(int k) {
a.setNum(k);
}发布于 2015-07-16 07:20:29
正如@ A getA()所评论的那样,getter getA()返回一个时态对象,当超出getA()范围时,该对象将被销毁。因此,您应该使用a返回对私有字段A &getA()的引用。然后您可以通过getA()调用A类的任何公共方法。
更进一步,使用A &getA()可以让客户端控制您的私有成员,这通常不是一个好主意。也就是说,可以用A类的另一个对象来更改私有字段a,比如使用getA() = A2。您应该添加一个常量版本:const A &getA() const;
因此,只需在B类中添加一个@kiviak回答的方法,我个人认为这是满足您需求的最佳实践。
https://stackoverflow.com/questions/31447388
复制相似问题