在下面的示例中,加法运算符已经过载:
class CVector {
public:
int x,y;
CVector operator + (const CVector&);
};
但是,如果在此类之前甚至没有声明或定义加法运算符,那么你会说加法运算符是否为类型CVector重载了?
谢谢!
答案 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
运算符的重载与+
一起使用。