一.友元
/*
友元的目的让一个类 或者 函数
能够访问另一个类的私有成员友元的关键字: friend三种友元
1、全局函数作为友元
2、类作为友元
3、成员函数作为友元
*///1.全局函数作为友元:
原本m_Car作为私有变量,类外不能访问,为了解决这个问题,只要在类内声明该函数为友元函数,这样该函数就可以访问类内私有变量class People{friend void friendVisit(People* p);public:People() {m_House = "别墅";m_Car = "跑车";}public:string m_House;private:string m_Car;
};void friendVisit(People* p) {cout << "好朋友来访问你的" << p->m_House << endl;cout << "好朋友来访问你的" << p->m_Car << endl;
}//2、类作为友元:让一个类去访问另一个类的私有成员
原本类PeopleFriend和类People不能访问对方变量,但只要在类People内声明类PeopleFriend为友元类,类PeopleFriend就可以访问类People里面内容了
class People;class PeopleFriend {
public:PeopleFriend() {}void visit(People* p);
};class People {friend class PeopleFriend;
public:People() {m_House = "别墅";m_Car = "跑车";}
public:string m_House;private:string m_Car;
};void PeopleFriend::visit(People* p) {cout << "好朋友来访问你的" << p->m_House << endl;cout << "好朋友来访问你的" << p->m_Car << endl;
}//3、成员函数作为友元: PeopleFriend的某个函数能够访问 People的私有成员变量
//如果你直接把类声明为友元,那也可以访问People的私有成员变量,但PeopleFriend里所有函数都可以访问People的私有成员变量;如果你声明类内函数,就不是所有函数可以访问。
class People;class PeopleFriend {
public:PeopleFriend() {}void visitAll(People* p);void visitPub(People* p);
};class People {// friend class PeopleFriend;friend void PeopleFriend::visitAll(People* p);
public:People() {m_House = "别墅";m_Car = "跑车";}
public:string m_House;
private:string m_Car;
};void PeopleFriend::visitAll(People* p) {cout << "好朋友访问了你的" << p->m_House << endl;cout << "好朋友访问了你的" << p->m_Car << endl;}
void PeopleFriend::visitPub(People* p) {cout << "好朋友访问了你的" << p->m_House << endl;// cout << "好朋友访问了你的" << p->m_Car << endl;
}