类名后跟空括号和空花括号

时间:2017-02-15 19:37:36

标签: c++

这是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;
}

1 个答案:

答案 0 :(得分:0)

  

我不确定CVector () {};在这里是什么意思。它看起来不像构造函数,

是什么让你有这个想法?当然,这是一个默认构造函数已定义,没有任何特殊的成员初始值设定项。

分号可以删除,只有普通函数声明才需要它,它不提供定义。

  

当我删除这一行时,编译器会给我错误。

这可能是因为代码的其他部分需要CVector的默认构造函数。显而易见的候选人是

CVector result;

延伸一点:

一旦声明了像

这样的自定义构造函数,就必须显式地声明/定义默认构造函数
CVector (int a,int b) : x(a), y(b) {}

自动生成的默认构造函数

CVector();
在这种情况下不会生成

在这种情况下最简单的方法是写

CVector () = default;

但你必须将它定义为可用于

之类的语句
CVector result;