重载和多态的关系———有什么区别???
运算符重载——的概念就是:在类中,我可以把一个可以重载的运算符做为一个函数名。
就是我在类的使用中我可以把运算符写成一个函数,比如运算符‘+’,那我就在类中定义一个叫 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个运算符。