1.定义
友元可以让一些类外的函数或者类来访问一个类中的私有成员,关键字为friend。
2.友元的三种实现
1.全局函数做友元
通常情况下private类外不可以访问
#include<iostream>
using namespace std;
#include<string>
class person
{
public:
string name="张三";
private:
int age=18;
};
void fun(person* p)
{
cout << "public:" << p->name << endl;//形参指针的话要用p->而不是p.
cout << "private:" << p->age << endl;
}
int main()
{
person p;
fun(&p);
system("pause");
return 0;
}
报错:
解决方法:
在类中进行friend声明(不需要写在public等之类的作用于之下,写在最上面就行)
class person
{
friend void fun(person* p);
public:
string name="张三";
private:
int age=18;
};
2.类做友元
1.前提
未提及的类被调用时,需要提前声明:
class age;
class person
{
public:
age* age;
};
class age
{
public:
int age1;
};
类外实现声明构造函数:
class age;
class person
{
public:
age* age;
};
class age
{
public:
int age1;
};
//需要标明范围(age::)
age::age()
{
age1 = 10;
}
成员函数也可以在类外声明:
class age;
class person
{
public:
age* age;
};
class age
{
public:
int age1;
void print();//提前声明
};
//需要标明范围(age::)
//不过需要在类内提前声明
void age::print()
{
cout << "aaa" << endl;
}
2.代码实现
#include<iostream>
using namespace std;
#include<string>
class base
{
public:
friend class son;
private:
int a = 100;
};
class son
{
public:
void print(base *BASE)
{
cout << BASE->a << endl;
}
};
int main()
{
base Base;
son Son;
Son.print(&Base);
return 0;
}