友元分类
-
友元函数:全局函数
-
友元类:另一个类
-
友元成员函数:另一个类的成员函数
class A { friend int f(double); friend class B; friend void C::g(int,int); }
友元生命可以出现在类中的任何地方
主要用在运算符重载:
class Time
{
friend Time operator+(const Time &t1, const Time &t2);
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);
void Show() const;
}
Time operator+(const Time &t1, const Time & t2);
Time operator+(const Time &t1, const Time & t2);
{
Time sum;
sum.minutes = t1.minutes + t2.minutes;
sum.hours = t1.hours + t2.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
func main(){
Time t1(1, 3), t2(0, 35), t3;
t3 = t1 + t2
友元函数的应用:
重载输出月算富,使对象可以哦那个 cout << 对象 输出
必须重载为全局函数, 因为第一个运算数cout 不是正在定义类的对象,而是ostream类的对象
//版本1: (缺点不能连续输出)
void operator<<(ostream &os, const Time &t)
{
os << t.hours << ':' << t.minutes;
}
//版本2:
ostream& operator<<(ostream &os, const Time &t)
{
os << t.hours << ':' << t.minutes;
return os;
}