[英]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 &
参数,应打印的成员a
和b
:
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个读访问)? 附加信息:
在我的真实系统中,类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();
}
};
和
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.