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

C++ 使用C+;中的const reference参数访问函数中的成员的最佳实践+;,c++,reference,parameter-passing,constants,C++,Reference,Parameter Passing,Constants,实现以下场景的最佳实践是什么: 类A包含类型为B的成员对象 class A { private: B b; }; class B { private: int x; }; 获取类型为A的对象作为const&参数的打印函数应打印A和b的成员: void Print(const A& a) { cout << a.b.x; } 关于其成员访问权,A类应如何实施 “b”应该公开吗 “class A”是否应该为b提供2个getter(1个用于“b”的写访问,1个用

实现以下场景的最佳实践是什么:
类A
包含类型为
B
的成员对象

class A
{
private:
  B b;
};

class B
{
private:
  int x;
};
获取类型为
A
的对象作为
const&
参数的打印函数应打印
A
b
的成员:

void Print(const A& a)
{
  cout << a.b.x;
}
关于其成员访问权,
A类
应如何实施

  • b
    ”应该公开吗
  • class A
    ”是否应该为b提供2个getter(1个用于“b”的写访问,1个用于“b”的读访问)
其他信息:

在我的实际系统中,类
A
B
要大得多,它们是一个庞大的遗留系统的一部分。在这个遗留系统中,
Print
Read
是“视图模型”的成员函数,其中,
Print
将值写入GUI,
Read
从GUI读取值,并设置
a
B
的成员。因此
A
B
的职责是保存数据(某种数据模型)。

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

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


最后,对于打印,惯用的方法是重载
,而应该使用成员函数,并尽可能地封装数据。为此,
Print
可以是
a
的成员函数:

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


最后,对于您的打印,惯用的方法是过载
为什么不将读写的责任转移到
B
,或者在这种情况下,另一种过载
Print
Read
?但是,您仍然需要使这些函数成为成员或朋友。我特别喜欢
Read
函数实际编写的方式。让他们保持猜测和警觉。在这种情况下,为什么不把读写的责任转移到
B
,或者另一个
Print
Read
过载?但是,您仍然需要使这些函数成为成员或朋友。我特别喜欢
Read
函数实际编写的方式。让他们保持猜测和警惕。