【发布时间】:2011-07-19 20:01:22
【问题描述】:
根据this线程的回复,operator=不能作为非成员函数重载。因此,例如,以下内容会使编译器非常生气:
class MyClass
{
// ...
};
MyClass& operator=(MyClass& Left, MyClass& Right)
{
// ...
}
这是为什么?我有一个带有 getter 和 setter 的容器类,所以成员函数是不必要的,它会破坏封装。上述线程的一个答案是确保“将 L 值作为其第一个操作数接收”,但我不完全理解这意味着什么。有人可以澄清一下吗?
此外,还有operator=、operator()、operator[] 和operator-> 的“奇怪”案例...?或者我应该将 all 重载运算符实现为成员函数...? (我知道这样做是完全合法的,但我正在寻找更好的做法。)
【问题讨论】:
-
我认为 getter/setter 比赋值运算符更能打破封装。注意:如果你没有定义一个你的类已经有一个赋值运算符。试试看。
-
成员函数不会破坏封装;他们是其中的一部分。创建“非成员、非友元函数”的偏好可能会导致类更简单,但在一般情况下,公开实现 operator=() 所需的所有内容比让 operator=() 成为成员更有可能削弱封装。
标签: c++ oop operator-overloading encapsulation assignment-operator