C ++ increment ++运算符重载

时间:2015-07-11 04:55:17

标签: c++ operator-overloading

我知道如何重载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;
}

我在编译上面的重载函数时遇到错误。

2 个答案:

答案 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指令执行。这可能是一个很好的理由,因为重载基本算术函数的代码将无法维护。