用一个例子来理解c++中的重载

来源:互联网 发布:java线程和进程区别 编辑:程序博客网 时间:2024/06/05 05:56

格式:operatorop(argument-list)

例:operator+(),表明重载“+”运算符,其中op必须为C++运算符,如@不是c++中的符号,则不能定义为重载。

下面用两个时间的类对象来说明重载“+”运算符:

class Time{private:int hours;int minutes;public:Time();Time(int h, int m);~Time();void addMin(int m);void addHou(int h);//Time sumTime(const Time & t)const;Time operator+(const Time & t)const;//重载+运算符,其实就是把类成员函数名sumTime换成operator+来完成相同的功能void showTime()const;};Time::Time(){hours = minutes = 0;}Time::Time(int h, int m){hours = h;minutes = m;}Time::~Time(){;}void Time::addMin(int m){hours = hours + m / 60;minutes = (m + minutes) % 60;}void Time::addHou(int h){hours = hours + h;}//Time Time::sumTime(const Time & t)const//Time Time::operator+(const Time & t)const//同样在函数定义处也要换成operator+{Time sum;sum.minutes = t.minutes + minutes;sum.hours = t.hours + hours + sum.minutes/60;sum.minutes %= 60;return sum;}void Time::showTime()const{std::cout << hours << ":" << minutes << std::endl;}int main(){using std::cout;using std::endl;Time planning;Time colding(2, 56);Time fixing(11, 36);Time total;cout << "planning time:"  ;planning.showTime();cout << endl;cout << "colding time:";colding.showTime();cout << endl;cout << "fixing time:";fixing.showTime();cout << endl;total = colding.sumTime(fixing);total= colding + fixing;//完成相同的功能cout << "colding.sumTime(fixing):";total.showTime();cout << endl;system("pause");return 0;}


必须要注意的是重载后的运算符必须至少有一个操作数是用户定义的类型,如上使用+运算符时,必须要含有Time类类型的对象。

并非每个运算符都能重载,如sizeof运算符、成员运算符“·”等都不能重载,此处不细说

阅读全文
0 0
原创粉丝点击