操作符重载

操作符重载

操作符重载实现
#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. 大多数可以重载的操作符都可以使用成员方法和非成员方法(函数形式)重载,但
    赋值:=,函数调用:(),下标运算符:[],通过指针访问成员:-> 只能通过成员方法重载
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值