Time类为例
class Time{
private:
int hours;
int minutes;
Time operator +(const Time &t)const;
Time operator -(const Time &t) const;
Time operator *(double mult) const;
friend Time operator *(double m,const Time &t);//利用友元函数重载运算符
friend ostream & operator <<(ostream &out,Time & t);//利用友元函数重载输出流
}
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-tot1)/60;
return diff;
}
Time Time::operator *(double mult) const{
Time result;
long totalminutes=hours*60*mult+minutes*mult;
result.minutes=totalminutes%60;
result.hours=totalminutes/60;
return result;
}
Time operator *(double m,const Time &t){
return t*m;
};
ostream & operator <<(ostream &out,Time & t){
out<<"hour:"<<t.hours<<"minute:"<<t.minutes<<endl;
return out;
}
Vector operator -() const;//单目运算符重载,取反运算符
Vector Vector::operator-()const{
return Vector(-x,-y);
}
2.类型转换函数
Stonewt wolfe(285.7);//一个Stonewt类实例
double host=double(wolfe);//将Stonewt类转换为double
double thinker=(double)wolfe;//同上
实现上述操作需定义类型转换函数
operator typeName();
如:operator double() const;
如:operator int();
//1.类型转换函数必须是类的方法
//2.没有return类型
//3.没有参数
3.类型转换函数应用时的二义性
Stonewt poppins(9.2.8);//建立一个Stonewt的对象,假设实现了double和int两种类型转换函数
cout<<poppins<<endl;//错误,无法确定调用哪种类型转换函数
long gone=poppins;//理由同上
如果删除int类型转换函数,上述操作就可以进行,因为没有二义性。
long gone=(double)poppins;//显式调用double类型转换函数。
long gone=int(poppins);//显式调用int类型转换函数
4.C++11可以规定必须显式调用类型转换函数
explicit operator double()const;
explicit operator int()const;
括号运算符[]的重载
char city[40]="Amsterdam";
city[0];
city:左操作数
0:右操作数
char & String::operator [](int i){
return str[i];
}
1.返回引用类型可以实现赋值运算
city[0]='r';
2.针对const对象的重载
const char & String::operator[](int i)const{
return str[i];
}