在程序中,有时候我们需要类外的特殊函数或者类也可以访问私有熟悉,这时候就要友元技术
友元的目的就是让一个函数或者类能够访问另一个类中的私有成员。
友元的三种实现:
- 全局函数做友元
- 类做友元
- 成员函数做友元
#include <iostream>
#include <string>
using namespace std;
/*成员函数做友元*/
class myfriend2
{
public:
myfriend2();
void visit2();
void visit3();
Home* p;
};
myfriend2::myfriend2()
{
this->p = new(Home);
}
void myfriend2::visit2()
{
cout << "i'm visiting " << p->A << endl;
}
void myfriend2::visit3()
{
cout << "i'm visiting " << p->B << endl;
}
/*主要的类*/
class Home
{
friend void test1(); //全局函数做友元
friend class myfriend; //类作为友元
friend void myfriend2::visit3(); //成员函数做友元(记住此时的myfriend2类必须定义在前面,不然就是只有声明而没有定义)
public:
Home(string a, string b);
string A;
private:
string B;
};
Home::Home(string a = "sittingroom", string b = "bedroom"): A(a), B(b) {} //提供了有参构造函数,不会再提供无参构造函数
class myfriend
{
public:
myfriend();
void visit();
Home* p;
};
/*类做友元*/
myfriend::myfriend()
{
this->p = new(Home);
}
void myfriend::visit()
{
cout << "i'm visiting " << p->A << endl;
cout << "i'm visiting " << p->B << endl;
}
/*全局函数做友元*/
void test1()
{
Home p;
cout << "home's a is " << p.A << endl;
cout << "home's b is " << p.B << endl;
}
void test2()
{
myfriend p;
p.visit();
}
void test3()
{
myfriend2 p;
p.visit2();
p.visit3();
}
int main()
{
test1();
test2();
test3();
return 0;
}