首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在c++中设置较低层次私有字段的最佳实践

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

Stack Overflow用户
提问于 2015-07-16 07:01:28
回答 2查看 100关注 0票数 2

我要上几节课:

代码语言:javascript
运行
复制
//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的上下文不同的值的最佳实践是什么?

例如,这似乎不起作用:

代码语言:javascript
运行
复制
// file main.cc
int main()
{ 
    B b(5);
    B.getA().setNum(7);
}

谢谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-16 07:09:22

在B中定义一个成员函数来设置A的值:

代码语言:javascript
运行
复制
void B::setA(int k) {
    a.setNum(k);
}
票数 4
EN

Stack Overflow用户

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31447388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档