c++ - 可以用一个重载的运算符来实现另一个运算符重载吗?

标签 c++ oop coding-style operator-overloading

例如,如果我重载了一个 + 运算符

myClass & operator + (const myClass & rhs)

还有重载=运算符

myClass & operator = (const myClass & rhs)

两个运算符(operator)都工作正常。我可以在我的 += 运算符重载中使用这个重载运算符吗?

myClass & operator += (const myClass & rhs){

*this = *this + progA;

return *this;

}

上面的代码运行正常。我只想知道这是否是良好的代码编写习惯,或者我应该重新使用前两个实现中的代码来实现 += 运算符重载。

最佳答案

你可以做到。但是,使用 operator+= 而不是相反的方式来实现 operator+ 更为常见。

myClass & operator += (const myClass & rhs) { ... )

// Return by value.
// const member function.
myClass operator + (const myClass & rhs) const
{
    myClass ret = *this; // Uses copy constructor, not assignment.
    return ret += rhs;
}

界面

myClass & operator + (const myClass & rhs);

不是惯用语,因为你不能做等同于

int a = 10 + 20;

使用

MyClass a = MyClass(args...) + MyClass(args...);

不会工作,因为 RHS 中的第一个对象是临时对象。

关于c++ - 可以用一个重载的运算符来实现另一个运算符重载吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49657351/

相关文章:

c++ - 打印新行时 std::string 清空

c++ - 我的私有(private)方法如何访问 C++ 中的公共(public)枚举?

java - 分两个层次应用工厂模式

python - 我应该将在初始化期间仅使用一次的字典放入我的类中吗?

c++ - 返回 (a) 与返回 a

c++ - 从 C++ 应用程序调试动态加载的 C++/CLI DLL

java - 我可以在崩溃的 OS API 周围放置 try/catch 吗?

c++ - 如何根据输入从数组中检索元素?

c++ - 在包含不同子类的 vector 中的某些对象上调用函数

javascript - 链接 Underscore.js 函数的首选方式是什么?