2015-07-11 62 views
0

我知道如何重载operator + =如果我正在使用类C++增量++操作符重载

class temp 
{ 
public: 
    int i; 
    temp(){ i = 10; } 
    int operator+=(int k) 
    { 
      return i+=k; 
    } 
}; 
int main() 
{ 
    temp var; 
    var += 67; 
    cout << var.i; 
    return 0; 
} 

但为什么不能我创建了一个重载+ =功能基本数据类型

int operator+=(int v, int h) 
{ 
    return v += (2*h); 
} 
int main() 
{ 
    int var = 10; 
    var += 67; 
    cout << i; 
    return 0; 
} 

我得到的错误,当我编译上述重载函数。

+0

[您无法在C++中更改内置类型的运算符的含义,因此只能针对用户定义的类型重载运算符。也就是说,至少有一个操作数必须是用户定义的类型。](http://stackoverflow.com/a/4421715/445976) – Blastfurnace

回答

1

运算符重载不支持基本类型。这些操作通过直接的CPU指令来执行。这可能是一个很好的理由,因为重载基本算术函数的代码是不可能维护的。

2

不允许为原始类型重载操作符。更多信息参见这里写的:

http://www.cprogramming.com/tutorial/operator_overloading.html

然而,你可以通过你身边想重载基本类型创建一个“包装”类,然后创建一个“转换构造”从去产生类似的效果原始类型添​​加到您的自定义类,另一个“转换运算符”从您的包装自定义类型返回到原始类型。

对于你的临时类是这样的:

class temp 
{ 
public: 
    int i; 
    temp(const int& orig){ i = orig; } 
    operator int(void) const { return i; } 
    int operator+=(int k) 
    { 
      return i+=k; 
    } 
};