先说一下类的成员访问限定符:
- public:类的外部可以访问;
- private:只能该类自己和友元可以用;
- protected:只有该类自己和子类和友元可以用;
继承的方式:
- public:
- 父类中,public和protected在子类中的访问属性保持不变;
- 父类中,private在子类中无法访问,即使是共有成员函数也不行;
- protected:
- 父类中,public和protected在子类中都变为protected;
- 父类中,private在子类中无法访问,即使是共有成员函数也不行;
- private:
- 父类中,public和protected在子类中都变为private;
- 父类中,private在子类中无法访问,即使是共有成员函数也不行;
友元:具有类成员函数相同的访问权限,可以访问类的private成员(需要在类中用friend关键字声明);
- 友元函数:
// A.h
class A
{
public:
friend void set_show(int x, A &a); //该函数是友元函数的声明
private:
int data;
};
// A.cpp
void set_show(int x, A &a) //友元函数定义,为了访问类A中的成员
{
a.data = x;
cout << a.data << endl;
}
- 友元类:
// A.h
class A
{
public:
friend class C; //这是友元类的声明
private:
int data;
};
// A.cpp
class C //友元类定义,为了访问类A中的成员
{
public:
void set_show(int x, A &a) { a.data = x; cout<<a.data<<endl;}
};
- 友元成员函数
注意:
- friend关系不可以继承
- friend关系是单向的
- friend关系不可以传递
优点:
- 灵活
- 便于重载
缺点:
- 破坏了封闭性