C++增量++运算符重载
C++ increment ++ operator overloading
我知道如何重载运算符 += 如果我使用 class 例如
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;
}
编译上述重载函数时出现错误。
不允许重载基本类型的运算符。作为参考,请看这里写的:
http://www.cprogramming.com/tutorial/operator_overloading.html
然而,您可以通过在要重载的原始类型周围创建一个 "wrapper" class,然后创建一个 "conversion constructor" 从原始类型到您的自定义 class 和另一个 "conversion operator" 从您的包装器自定义类型返回原始类型。
你临时 class 像这样:
class temp
{
public:
int i;
temp(const int& orig){ i = orig; }
operator int(void) const { return i; }
int operator+=(int k)
{
return i+=k;
}
};
基本类型不支持运算符重载。这些操作由直接CPU指令执行。但这可能是有充分理由的,因为重载基本算术函数的代码将无法维护。
我知道如何重载运算符 += 如果我使用 class 例如
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;
}
编译上述重载函数时出现错误。
不允许重载基本类型的运算符。作为参考,请看这里写的:
http://www.cprogramming.com/tutorial/operator_overloading.html
然而,您可以通过在要重载的原始类型周围创建一个 "wrapper" class,然后创建一个 "conversion constructor" 从原始类型到您的自定义 class 和另一个 "conversion operator" 从您的包装器自定义类型返回原始类型。
你临时 class 像这样:
class temp
{
public:
int i;
temp(const int& orig){ i = orig; }
operator int(void) const { return i; }
int operator+=(int k)
{
return i+=k;
}
};
基本类型不支持运算符重载。这些操作由直接CPU指令执行。但这可能是有充分理由的,因为重载基本算术函数的代码将无法维护。