fgf*_*jhm 2 c++ overloading operator-keyword
我在c ++代码上有一个名为ThreeDigits的类.我重载了+操作数,这样:
ThreeDigits* ThreeDigits::operator+(const ThreeDigits &number) const
{
double result= getNumber()+number.getNumber();
ThreeDigits* new_result=new ThreeDigits(result);
return new_result;
}
Run Code Online (Sandbox Code Playgroud)
但是当我写主要功能时:
ThreeDigits* first=new ThreeDigits(2.55998);
ThreeDigits* second=new ThreeDigits(5.666542);
ThreeDigits* result=first+second;
Run Code Online (Sandbox Code Playgroud)
我收到以下编译错误:类型为ThreeDigits*和ThreeDigits*的无效操作数为二元运算符+
你能告诉我这是什么问题吗?谢谢
Mat*_*lia 12
您正在尝试对指向对象的指针进行求和,而不是对象本身.要调用重载的运算符,必须在对象上调用它,从而取消引用指针.
顺便说一下,用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;
Run Code Online (Sandbox Code Playgroud)
顺便说一下,重载算术运算符的常用方法是首先重载赋值版本(+ =, - =,...),然后在它们上构建"普通"版本.有关运算符重载的更多信息,请参阅运算符重载FAQ.
| 归档时间: |
|
| 查看次数: |
3030 次 |
| 最近记录: |