操作符重载

操作符重载

操作符重载实现

#include <iostream>
using namespace std;
class MyClass
{
private:
    int mValue;
public:
    int getValue();
    void setValue(int value);
    MyClass(int value);
    MyClass operator+(MyClass c) {
		MyClass myClass(0);
    	myClass.mValue = mValue + c.mValue;
    	return myClass;
	}
    MyClass operator-(MyClass c) {
		MyClass myClass(0);
    	myClass.mValue = mValue - c.mValue;
    	return myClass;
	}
};

操作符重载使用

	MyClass myClass1(20);
    MyClass myClass2(30);
    
    MyClass myClass = myClass1 + myClass2;
    cout << myClass.getValue() << endl;
    myClass = myClass1 - myClass2;
    cout << myClass.getValue() << endl;

函数形式的操作符重载

实现

MyClass operator*(MyClass &left, MyClass &right)
{
    MyClass myClass(0);
    myClass.setValue(left.getValue() * right.getValue());
    return myClass;
}

使用

	myClass = myClass1 * myClass2;
    cout << myClass.getValue() << endl;

操作符重载的规范

  1. 重载后的操作数至少有一个是用户自定义类型,为了防止用户重载基本类型的操作符
	错误示例:
	int operator+(int left, int right)
	{
	    return (left + right)*2;
	}
  1. 不能改变操作符本身的特性,例如,不能将二元操作符变成一元或三元操作符
错误示例:
	int operator+(int left, MyStruct myStruct, int right)
	{
	    return left + myStruct.getValue();
	}
// int right这个参数是不被允许的
	int operator+(int left)
	{
	    return left;
	}
// 只有一个参数是不能运算+的
  1. 不能修改操作符的优先级
  2. 不能创建新的操作符
错误示例:
	int operator+&^%$(int left, MyStruct myStruct)
	{
	    return left;
	}
int a = myStruct +&^%$ 4;
  1. 并不是所有的操作符都可以重载,例如sizeof、指针(*),?:(条件操作符)等
  2. 大多数可以重载的操作符都可以使用成员方法和非成员方法(函数形式)重载,但
    赋值:=,函数调用:(),下标运算符:[],通过指针访问成员:-> 只能通过成员方法重载
上一篇:TB下载器隐私协议


下一篇:C++中 线程函数为静态函数 及 类成员函数作为回调函数