这是cplusplus.com上的重载运算符的示例代码。我不确定“CVector(){};”在这里意味着它看起来不像构造函数,当我删除这一行时,编译器会给我错误。
// overloading operators example
#include <iostream>
using namespace std;
class CVector {
public:
int x,y;
CVector () {}; <-- This Line
CVector (int a,int b) : x(a), y(b) {}
CVector operator + (const CVector&);
};
CVector CVector::operator+ (const CVector& param) {
CVector temp;
temp.x = x + param.x;
temp.y = y + param.y;
return temp;
}
int main () {
CVector foo (3,1);
CVector bar (1,2);
CVector result;
result = foo + bar;
cout << result.x << ',' << result.y << '\n';
return 0;
}
答案 0 :(得分:0)
我不确定
CVector () {};
在这里是什么意思。它看起来不像构造函数,
是什么让你有这个想法?当然,这是一个默认构造函数已定义,没有任何特殊的成员初始值设定项。
分号可以删除,只有普通函数声明才需要它,它不提供定义。
当我删除这一行时,编译器会给我错误。
这可能是因为代码的其他部分需要CVector
的默认构造函数。显而易见的候选人是
CVector result;
延伸一点:
一旦声明了像
这样的自定义构造函数,就必须显式地声明/定义默认构造函数CVector (int a,int b) : x(a), y(b) {}
自动生成的默认构造函数
CVector();
在这种情况下不会生成。
在这种情况下最简单的方法是写
CVector () = default;
但你必须将它定义为可用于
之类的语句CVector result;