繁体   English   中英

在C ++中使用const引用参数访问函数中成员的最佳实践

[英]Best practices accessing members in function with const reference parameter in C++

实施以下方案的最佳实践是什么:
Class A拥有类型B的成员对象。

class A
{
private:
  B b;
};

class B
{
private:
  int x;
};

它获取类型的对象的打印功能A作为const &参数,应打印的成员ab

void Print(const A& a)
{
  cout << a.b.x;
}

读取函数应设置a (和b )及其成员的值:

void Read(A& a)
{ 
  // ...
  a.b.x = 2;
}

关于其成员访问权限,应如何实施class A

  • b应该公开吗?
  • class A ”是否应该为b提供2个吸气剂(1个对“ b”的写访问和1个读访问)?

附加信息:
在我的真实系统中,类AB更大,它们是庞大的旧系统的一部分。 在该传统系统PrintRead是一个“视图模型”,其中的成员函数Print的值写入到GUI和Read读取来自GUI的值,并设置的成员AB 因此, AB的责任在于保存数据(某种数据模型)。

您应该改用成员函数,并尽可能地封装数据。 为此, Print可以是A的成员函数:

class A
{
    B b;
public:
    void Print() const /*Let's add some const correctness*/
    {
        b.Print();
    }
};

class B
{
    int x;
public:
    void Print() const
    {
        std::cout << x;
    }

    B& operator=(int new_x) /*Standard form of the assignment operator*/
    {
        x = new_x;
        return *this;
    }
};

请注意,我为B提供了赋值运算符 然后,您可以在A类中构建一个函数:

void setX(int x)
{
    b = x;
}

最后,尽管如此,对于您的打印,惯用的方法是为<< std::ostream重载<< 然后,您可以删除Print功能。 请参阅如何为ostream适当地重载<<操作符?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM