声明和定义重载运算符的不同参数

时间:2012-01-03 08:37:27

标签: c++ operator-overloading

班内宣言:
Integer operator+ (const Integer& right);

课外定义:

Integer operator+ (const Integer& left, const Integer& right)
{
    return left ;
}

编译器在声明和定义中强制执行不同的数字参数有什么意义?

3 个答案:

答案 0 :(得分:4)

你在那里声明了两个不同的operator+。正确的课外定义是这样的:

Integer Integer::operator+(const Integer& right)
{
    return *this;
}

答案 1 :(得分:4)

第一个是二元运算符重载为成员函数,第二个是二元运算符重载为非成员函数。

当运算符被定义为成员时,显式参数的数量减少一,因为调用对象被隐式提供为操作数。因此,二元运算符采用一个显式参数,一元运算符为none。在二元运算符的情况下,左手操作数是调用对象,并且不会对其进行类型强制。

这与非成员操作员形成对比,后者可能会强制执行左操作数。

答案 2 :(得分:2)

这些被视为两种不同的方法,即它被视为方法重载。