@c++公有、私有、保护的理解
c++公有、私有、保护的理解
c++的三大特点:封装、继承、多态
其中封装:将数据和函数等集合在一个单元中(即类)。被封装的类通常称为抽象数据类型。封装的意义在于保护或者防止代码(数据)被我们无意中破坏。
为了能够实现数据封装的功能特性,就产生了公有权限、私有权限、保护权限;
权限的访问性文字表示:
权限其实就是对类成员的可访问性。
1.公有成员
类可以访问,
类对象可以访问,
通过公有继承的派生类可以访问,
通过私有继承的派生类可以访问,
通过保护继承的派生类可以访问,
通过公有继承的派生类的对象可以访问,
通过私有继承的派生类的对象不可以访问,
通过保护继承的派生类的对象不可以访问。
2.私有成员
类可以访问,
类对象不可以访问,
通过公有继承的派生类不可以访问,
通过私有继承的派生类不可以访问,
通过保护继承的派生类不可以访问,
通过公有继承的派生类的对象不可以访问,
通过私有继承的派生类的对象不可以访问,
通过保护继承的派生类的对象不可以访问。
3.保护成员
类可以访问,
类对象不可以访问,
通过公有继承的派生类可以访问,
通过私有继承的派生类可以访问,
通过保护继承的派生类可以访问,
通过公有继承的派生类的对象不可以访问,
通过私有继承的派生类的对象不可以访问,
通过保护继承的派生类的对象不可以访问。
但是这里这样只从字面意思上去看很难理解、感觉有点生涩;其实很容易理解,c++为了能够更好的实现封装将代码的作用域分为了三个部分:类内部、类的派生类、类的对象三个部分;类内部是指类的内部函数、类内部的成员、类的内部成员变量,类的对象属于类的外部;
公有成员作用于:类的内部、类的派生类和类的对象三个作用域;
保护成员作用于:类的内部、类的派生类两个作用域;
私有成员作用于:类内部一个作用域;
公有成员->保护成员->私有成员其作用域逐渐减小;在作用域不改变作用域的的情况下,其作用域的作用范围始终是这样子;
作用域的改变
作用域的变化: 继承导致的作用域的改变,公有继承、保护继承、私有继承导致的作用域的变化;
公有继承: 作用域不发生改变,原来的属于基类的公有成员被派生类继承之后依然属于派生类的公有成员;原来属于基类的保护类的成员被派生类继承之后依然属于派生类的保护成员;原来属于基类的私有成员被派生类继承之后属于派生类的私有成员;作用域不发生改变;
保护继承: 作用域发生改变,原来的属于基类的公有成员被派生类继承之后作用域降低为属于派生类的保护成员;原来属于基类的保护类的成员被派生类继承之后依然属于派生类的保护成员;原来属于基类的私有成员被派生类继承之后属于派生类的私有成员;只是将基类的公有成员的作用域降低为了保护成员的作用域,将作用域大于保护类成员的全部降低为保护类成员的作用域;
私有继承: 作用域发生改变,原来的属于基类的公有成员被派生类继承之后作用域降低为属于派生类的私有成员;原来属于基类的保护类的成员被派生类继承之后作用域降低为属于派生类的私有成员;原来属于基类的私有成员被派生类继承之后属于派生类的私有成员;将基类的公有成员的作用域和保护成员的作用域全部降低为了私有成员的作用域,将作用域大于私有类成员的全部降低为私有类成员的作用域;