对于类的私有部分,只能通过公有的方法访问,但有时这种限制太严格,不适合特定的编程问题。C++提供另一种访问途径 - 友元。
创建友元函数的第一步是将其原型放在类声明中,并在原型声明前加上关键字friend。在上面的Time类中,如果使用友元,那么应该如下:
friend Time operator *(double m, const Time& t);
第二步是编写函数定义,因为它不是类成员函数,所以不使用Time::限定符。另外不要在定义中使用friend。
Time operator *(double m, const Time& t)
{
int minus = int(m*(t.hours*60+t.minutes));//直接使用私有成员t.hours和t.minutes
return Time(minus / 60, minus % 60);
}
完整的代码如下:
class Time
{
private:
int hours;//小时
int minutes;//分钟
public:
Time(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;
friend Time operator *(double m, const Time& t);//友元函数
};
Tim