C++的三种封装层级
我们都知道C++的一个好处是封装,在类中有三个封装层次,也是访问的限制,那我们来探索一下public、protect、private这三个家伙。
在定义类中的访问限制
- public:以下的这些成员和方法公开为外界使用,自身、子类都可以使用
- protect:以下的这些成员和方法只限成员本身和子类进行使用,不对其他开放
- private:以下这些成员和方法只能自己使用,不对外界和子类开放
下面我们上一盘栗子给各位看官吃吃:
//定义一个基类
class base {
//在内部完全能随便使用public、protect和private三个级别的东西
public:
int a;
void af() { cout << a << endl; bf(); cf(); };
protected:
int b;
void bf() { cout << b << endl; af(); cf(); };
private:
int c;
void cf() { cout << c << endl; af(); bf(); };
public:
base():a(1),b(2),c(3) {};
~base() {};
};
class drive :public base {
void fun() {
//public级别的能过使用
cout << a << endl;
af();
//protect级别的也能过使用
cout << b << endl;
bf();
//但private级别的不能使用了,以下两行会报错
cout << c << endl;XXXXXXXXXXXXXX
cf();XXXXXXXXXXXXXXXXXXXXX
}
};
int main() {
base t;
//public级别能在外界调用
cout << t.a << endl;
t.af();
//但protect和private级别的就不能再外界调用了,以下四行会报错
cout << t.b << endl;XXXXXXXXXXX
t.bf();XXXXXXXXXXXX
cout << c << endl;XXXXXXXXXXXXXX
c.cf();XXXXXXXXXXXXXXX
drive d;
//publict继承过来后public级别的能过调用
d.a;
d.af();
//但public继承过来的protect和private就不能调用了
d.b;XXXXXXXXXXXx
d.bf();XXXXXXXXXXx
d.c;XXXXXXXXXXX
d.cf();XXXXXXXXXXXXX
}
下面是封装级的一个整理:
继承中的三个封装级
在不同的继承方式中,父类中的封装级会发生不同的变化,下面是继承中相应的三个封装继承的变化:
简单概括一下就是父类中private级别的封装子类不会继承;public的继承会维持父类原来的public、protect前两者的封装级别,而protect继承前两者都会成为protect,private继承将前两者变成private