我有一个名为 ThreeDigits 的 C++ 代码类。我这样重载了 + 操作数:
ThreeDigits* ThreeDigits::operator+(const ThreeDigits &number) const
{
double result= getNumber()+number.getNumber();
ThreeDigits* new_result=new ThreeDigits(result);
return new_result;
}
但是当我在 main 函数上写下:
ThreeDigits* first=new ThreeDigits(2.55998);
ThreeDigits* second=new ThreeDigits(5.666542);
ThreeDigits* result=first+second;
我收到以下编译错误:
ThreeDigits* 和 ThreeDigits* 类型的操作数对二元运算符+无效
你能告诉我问题是什么吗?谢谢
你正在尝试求和指向对象的指针而不是物体本身。要调用重载运算符,您必须在对象上调用它,从而取消对指针的引用。
顺便说一句,创建所有这些对象new
一种糟糕的 C++ 方法;在 C++ 中,与 Java/C# 不同,您应该使用new
仅在必要时才分配堆栈上的所有其余部分。拥有operator+
返回指向新创建的对象的指针是令人厌恶的。
编写代码的 C++ 方式是:
ThreeDigits ThreeDigits::operator+(const ThreeDigits &number) const
{
return ThreeDigits(getNumber()+number.getNumber()); // construct a temporary and return it
}
// ...
ThreeDigits first(2.55998);
ThreeDigits second(5.666542);
ThreeDigits result=first+second;
顺便说一句,重载算术运算符的常用方法是首先重载赋值版本(+=、-=、...),然后在它们之上构建“正常”版本。有关运算符重载的更多信息,请参阅运算符重载常见问题解答 https://stackoverflow.com/questions/4421706/operator-overloading.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)