友元

105 阅读1分钟

友元分类

  • 友元函数:全局函数

  • 友元类:另一个类

  • 友元成员函数:另一个类的成员函数

      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;
}