c++——运算符重载

重载和多态的关系———有什么区别???

运算符重载——的概念就是:在类中,我可以把一个可以重载的运算符做为一个函数名。
就是我在类的使用中我可以把运算符写成一个函数,比如运算符‘+’,那我就在类中定义一个叫 void +();的这个函数,这个函数去实现减的功能————(当然,脑子没点坑的不会去这样做啊);
总的来说就是在类中我可以赋予运算符一个功能,在类中它就是这个功能。我想它是什么功能就是什么功能。
我们先写一个计时器的类:

#include <iostream>
#include <unistd.h>
using namespace std;

class Timer{

public:
	Timer(){
		hour = 0;
		min = 0;
		sec = 0;
	};
	~Timer(){
	};
	void addrsec( int sec=1){
		this->min += ((this->sec + sec)/60)%60;
		this->sec = (this->sec + sec)%60;
		this->hour += (this->min/60)%24;
		
	}	
	void show(){
		cout << hour << ":" << min << ":" << sec << endl;
	}
	
private:
	int hour;
	int min;
	int sec;
};
int main (int argc, char * argv[]){
	
	Timer T;
	while(1){
		T.addrsec();
		T.show();
		sleep(1);
	}
	
	
}

好,这是一个简单的把计时器的程序。它可以实现我们的手表拥有的功能。

那我们就去体验一下重载运算符。
比如:
T.addrsec() :这个函数就是每次加一秒
那既然是加 那我为什么不写成 T+1呢?
如果直接写T+1那肯定不可以啊,T是一个定时器的对象,又不是一个整形数,你加一你加的去哪里?时分秒,还是函数里面??
编译器就懵逼了,这么个傻逼在干嘛,它要让我加的去哪里?
但是,我们重载一下+这个运算符就可以了。
这里我们在扩充一下,我不仅仅让实现 T + 1 ,我还实现 T + T ;
——实现:

Timer operator + (int &x){
	Timer.sec += x;
}
Timer operator + (Timer &x){
	Timer.sec += x.sec;
}

只要这两个重载放到 ,类中的public区域,就可以使用+ 这个函数

重载方式:就是一个函数嘛 函数肯定有返回值 参数 这些,根据需求填
Timer (返回一个Timer 对象) operator (重载操作符) + (函数名)(int &x)(用引用的方式传参数、你也可以用其他方式)。

这就是运算符的重载:

不是所有的运算符都可以重载。
在这里插入图片描述

前面讲的是普通运算符的重载。
在这里插入图片描述
我特殊运算符的重载。
其实重载方式还是一样
重载 = 可以预防浅拷贝的问题 (深浅拷贝);
重载的限制
1、使用运算符重载不能改变运算符原本的语句规则。
2、运算符重载不会影响运算符的优先级
3、不能自己创建新的运算符,只能使用可重载的49个运算符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值