我知道如何重载operator + =如果我正在使用类,例如
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 :(得分: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;
}
};
答案 1 :(得分:1)
原始类型不支持运算符重载。这些操作由直接CPU指令执行。这可能是一个很好的理由,因为重载基本算术函数的代码将无法维护。