操作符重载
函数重载定义:名称相同但特征(参数列表)不同的函数
eg
重载后的操作符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载操作符 不能将减法操作符(-)重载为计算两个double值的和,而不是它们的差。
使用操作符时不能违反操作符原来的句法规则。
不能定义新的操作符
不能重载下面的操作符
sizeof
.成员操作符
.*成员指针操作符
::作用域操作符
?:条件操作符
typeid一个RTTI操作符
const_cast强制类型转换操作符
dynamic_cast强制类型转换操作符
reinterpret_cast强制类型转换操作符
static_cast强制类型转换操作符
eg
函数重载定义:名称相同但特征(参数列表)不同的函数
eg
mytime1.h
#ifndef MYTIME1_H_
#define MYTIME1_H_
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h,int m = 0);
void AddMin(int m);
void AddHr(int h);
void Reset(int h=0,int m=0);
Time operator+(const Time&t)const;
void Show()const;
};
#endif
mytime1.cpp
#include <iostream>
#include "mytime1.h"
Time::Time()
{
hours = minutes = 0;
}
Time::Time(int h,int m)
{
hours = h;
minutes = m;
}
void Time::AddMin(int m)
{
minutes +=m;
hours +=minutes/60;
minutes %=60;
}
void Time::AddHr(int h)
{
hours +=h;
}
void Time::Reset(int h,int m)
{
hours = h;
minutes = m;
}
Time Time::operator+(const Time &t)const
{
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + sum.minutes/60;
sum.minutes %= 60;
return sum;
}
void Time::Show()const
{
std::cout<<hours<<" hours. "<<minutes<<" minutes.";
}
usetime1.cpp
限制#include <iostream> #include "mytime1.h" int main() { using std::cout; using std::endl; Time planning; Time coding(2,40); Time fixing(5,55); Time total; cout<<"planning time = "; planning.Show(); cout<<endl; cout<<"coding time = "; coding.Show(); cout<<endl; cout<<"fixing time = "; fixing.Show(); cout<<endl; total = coding + fixing; cout<<"coding + fixing = "; total.Show(); cout<<endl; Time morefixing(3,28); cout<<"more fixing time = "; morefixing.Show(); cout<<endl; total = morefixing.operator+(total); cout<<"morefixing.operator+(total) = "; total.Show(); system("pause"); return 0; }
重载后的操作符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载操作符 不能将减法操作符(-)重载为计算两个double值的和,而不是它们的差。
使用操作符时不能违反操作符原来的句法规则。
不能定义新的操作符
不能重载下面的操作符
sizeof
.成员操作符
.*成员指针操作符
::作用域操作符
?:条件操作符
typeid一个RTTI操作符
const_cast强制类型转换操作符
dynamic_cast强制类型转换操作符
reinterpret_cast强制类型转换操作符
static_cast强制类型转换操作符
eg
mytime2.h
#ifndef MYTIME2_H_ #define MYTIME2_H_ class Time { private: int hours; int minutes; public: Time(); Time(int h,int m = 0); void AddMin(int m); void AddHr(int h); void Reset(int h = 0,int m = 0); Time operator+(const Time & t)const; Time operator-(const Time & t)const; Time operator*(double n)const; void Show()const; }; #endif
mytime2.cpp
#include <iostream> #include "mytime2.h" Time::Time() { hours = minutes = 0; } Time::Time(int h,int m) { hours = h; minutes = m; } void Time::AddMin(int m) { minutes += m; hours += minutes/60; minutes %= 60; } void Time::AddHr(int h) { hours += h; } void Time::Reset(int h,int m) { hours = h; minutes = m; } //重载+操作符 Time Time::operator+(const Time & t)const { Time sum; sum.minutes = minutes + t.minutes; sum.hours = hours + t.hours + sum.minutes/60; sum.minutes %= 60; return sum; } //重载-操作符 Time Time::operator-(const Time & t)const { Time diff; int tot1,tot2; tot1 = t.minutes + 60*t.hours; tot2 = minutes + 60*hours; diff.minutes = (tot2 - tot1)%60; diff.hours = (tot2 - tot2)/60; return diff; } //重载*操作符 Time Time::operator*(double mult)const { Time result; long totalminutes = hours*mult*60 + minutes*mult; result.hours = totalminutes/60; result.minutes = totalminutes%60; return result; } void Time::Show()const { std::cout<<hours<<" hours, "<<minutes<<" minutes."; }
usetime.cpp
#include <iostream> #include "mytime2.h" int main() { using std::cout; using std::endl; Time weeding(4,35); Time waxing(2,47); Time total; Time diff; Time adjusted; cout<<"weeding time = "; weeding.Show(); cout<<endl; cout<<"waxing time = "; waxing.Show(); cout<<endl; cout<<"toal work time = "; total = weeding + waxing; total.Show(); cout<<endl; cout<<"weeding time - waxing time = "; diff = weeding - waxing; diff.Show(); cout<<endl; adjusted = total*1.5; cout<<"adjusted word time = "; adjusted.Show(); cout<<endl; system("pause"); return 0; }