隐藏的实现
private,protected,public三个关键字
C与C++的区别:struct 和class关键字,不再权限关键字下的成员,struct默认为公有(public),class默认为私有(private)
友元
定义函数或者类为当前类的友元则友元函数或类对当前类具有所有的访问权限,友元只能在某个类里面定义,因为只有类有权限的意义
void global_fun();
class b
{
public:
void b_member_fun();
void b_member_fun2();
};
class c
{
public:
void c_member_fun();
}
class a
{
private:
void a_member_fun();
int a_data;
public:
friend void global_fun(); //声明global_fun()为类a的友元函数
friend void b::b_member_fun();//声明b_member_fun()为类a的友元函数
};
void global_fun()
{
//....
a a1;
a1.a_member_fun(); //a_member_fun为私有成员函数
/*由于a声明了global_fun()为友元函数,所以上一句调用没有错,可以 访问到a的私有成员*/
//...
};
void b::b_member_fun()
{
a a2;
a2.a_member_fun(); //正确
};
void b::b_member_fun2()
{
a a2;
a2.a_member_fun(); //错误,b::b_member_fun2()不是a的友元函数
}
void c::c_member_fun()
{
a a3;
a3.a_data = 1;
a3.a_member_fun();
//正确,c类为a类的友元函数,所以c的所有成员函数都有对a的所有权限
}
特别情况
当成员函数需要传递一个类指针的函数,友元函数如果需要调用带有类指针的函数,那么友元函数需要在参数也定义类指针,如果类没有声明,可以先声明一个类,但不去定义
嵌套友元
嵌套的类不能获取上一级类的私有访问权限,解决方法是在上一级类定义嵌套类为友元类,如
class a
{
class b
{
void b_f();
void b_f2();
}
friend a::b;//定义嵌套类b为a的友元类
}