概念: 通常让函数成为类的友元,可以赋予该函数与类的成员函数相同的访问权限
需求:在为类重载二元(两个参数)运算符时,需要用到友元
重载运算符(作为成员函数还是非成员函数):对于很多运算符来说,可以使用成员函数和非成员函数重载,一般来说,非成员函数应该是友元,这样它才能访问类的私有数据
.hpp
#ifndef FriendCode_hpp
#define FriendCode_hpp
#include <stdio.h>
#include <iostream>
using namespace std;
class Time {
public:
double p_d;
//成员函数重载
Time operator*(double d);
//友元函数
friend Time operator*(double d , Time &t);
friend ostream & operator<<(ostream &os ,const Time &t);
};
#endif /* FriendCode_hpp */
#include "FriendCode.hpp"
//普通运算符重载
Time Time::operator*(double d)
{
this->p_d *= d;
return *this;
}
//友元函数重载operator*,不需要声明类 Time::operator*()
Time operator*(double d , Time &t)
{
Time T;
T.p_d *= t.p_d;
return T;
}
//友元函数重载operator<<,不需要声明类 Time::operator*()
ostream & operator<<(ostream &os ,const Time &t)
{
os << t.p_d << "重载<<" << endl;;
return os;
}
main
#include "FriendCode.hpp"
int main(int argc, const char * argv[]) {
//友元函数 double * Time.double
Time t;
Time b{10};
t = 3*b;
//成员函数 Time.double * double
Time k;
k = b.operator*(10);
k = k*10;
//输出<<
cout << b;
return 0;
}