为什么要重载以前未定义的运算符?

时间:2017-05-10 17:04:38

标签: c++

在下面的示例中,加法运算符已经过载:

class CVector {
public:
int x,y;
CVector operator + (const CVector&);
};

但是,如果在此类之前甚至没有声明或定义加法运算符,那么你会说加法运算符是否为类型CVector重载了?

谢谢!

2 个答案:

答案 0 :(得分:2)

cppreference将运算符重载定义为

  

运算符重载:为用户定义类型的操作数自定义C ++运算符。重载运算符是具有特殊函数名称的函数。

因此,运算符+实际上是一个具有预定义名称operator+的函数,该函数已用于多种类型。现在,当您为用户定义的类型operator+提供CVector的自定义实现时,这被视为overloading,因为您为各个参数的给定函数名定义了不同的实现

答案 1 :(得分:1)

  

如果在此类之前甚至没有声明或定义加法运算符,你会说加法运算符是否为类型CVector重载了?

假设你有:

int a = 10;
int b = 20;

如果您使用a + b,则表示您使用的+运算符版本是为int定义的。

现在,假设你有:

std::string as;
std::string bs;

如果您使用as + bs,则表示您使用的是为+定义的std::strings运算符版本。因此,此+运算符过载,可与std::string一起使用。

来到你的班级,让我们说你有:

CVector v1 = { ... };
CVector v2 = { ... };

当您定义一个允许您使用v1 + v2的函数时,与+一起使用的CVector运算符的过载

<{1}} <{1}} +运算符的重载 CVector运算符的重载+一起使用。