四十七、多态性:运算符重载为类的友元函数

来源:互联网 发布:mac鼠标能点右键吗 编辑:程序博客网 时间:2024/06/05 14:50
友员函数可以通过类对象访问类的公、私、保护成员。和类成员函数权限一样与重载为成员函数不同的是:重载的友元函数不属于任何类,这样操作数都需要通过函数的形参表传递。(前面的双目只需提供一个参数,因为调用对象本身就是一个操作数了)同样分为双目运算和单目运算来讨论。双目运算符如类A “+”重载为其友员函数。对象a+b相当于 operator+(a,b)
单目运算符以前置和后置“++”为例前置++a   相当于operator++(a)后置a++   相当于operator++(a,0)  //0同样是为区分,无实际意义
#include<iostream.h>//using namespace std; //vc6.0运程异常,注释后运行通过class Time{public:         Time(int h=0,int m=0);  //默认参数值         friend Time operator+(Time t1,Time t2); //重载为类的友员函数         int GetH(){return m_hour;}         int GetM(){return m_minute;}         void showTime();private:         int m_hour,m_minute;}; Time::Time(int h,int m)//默认参数不能在函数声明和实现中同时出现{         h+=m/60;         m%=60;         m_hour=h;         m_minute=m;}Time operator +(Time t1,Time t2)  //和上例基本相同,区别只重载为友元函数,有两个操作数{         int newH,newM;         newM=t1.m_minute+t2.m_minute;         newH=t1.m_hour+t2.m_hour;         newH+=newM/60;         newM%=60;         newH%=24;         return Time(newH,newM);         //看似对构造函数的调用,实际是构造一个临时对象并返回到主函数中}void Time::showTime(){         cout<<m_hour<<"时"<<m_minute<<"分"<<endl;}int main(){         Time t1(15,51),t2(10,30);         Time t3=t1+t2;         t3.showTime();         return 0;}
//2时21分
//Press any key to continue
0 0
原创粉丝点击