[英]Operator overloading with different object types as operands in C++
class myClass
{
public:
int myVal;
myClass(int val) : myVal(val)
{
}
myClass& operator+(myClass& obj)
{
myVal = myVal + obj.myVal;
return *this;
}
myClass& operator+(int inVal)
{
myVal = myVal + inVal;
return *this;
}
myClass& operator=(myClass& obj)
{
myVal = obj.myVal;
return *this;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
myClass obj1(10);
myClass obj2(10);
obj1 = obj1 + obj2;
obj1 = 20 + obj2; // Error : No matching operands for operator "+"
return 0;
}
如何在 integer 和 myClass object 類型上實現運算符“+”作為操作數? (obj1 = 20 + obj2)
您通常將二進制算術+=
( 復合賦值) 運算符實現為成員 function,並將+
作為非成員 function 實現,后者利用前者; 這允許提供后者的多個重載,例如當自定義二進制算術運算符的兩個操作數不屬於同一類型時:
class MyClass
{
public:
int myVal;
MyClass(int val) : myVal(val) {}
MyClass& operator+=(int rhs) {
myVal += rhs;
return *this;
}
};
inline MyClass operator+(MyClass lhs, int rhs) {
lhs += rhs;
return lhs;
}
inline MyClass operator+(int lhs, MyClass rhs) {
rhs += lhs;
return rhs;
// OR:
// return rhs + lhs;
}
int main() {
MyClass obj1(10);
MyClass obj2(10);
obj1 = 20 + obj2;
obj1 = obj1 + 42;
}
有關運算符重載的一般最佳實踐建議,請參閱以下問答:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.