介绍
面向对象的基本特征:封装,继承,多态
封装
将成员的属性和实现过程设置为私有,仅透过对外暴露接口函数,数据隐藏封装在内部,同时来说将函数定义和类声明放在不同的文件也是一种封装。总的来说封装就是把客观事物封装成抽象类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息进行隐藏,默认是private;可以拥有的权限有:public,protected,private;
- public 成员:任意实体都可以访问 。
- protected成员:子类和本类成员函数都可以访问。
- private 成员: 只允许本类的成员函数,友元类或友元函数访问。
继承
- 如果一个类是由另外一个继承而来,该类成为派生类,被继承的类为基类。
- 每个类都有自己的成员变量和成员函数,派生类除了自己的成员函数和变量之外还有基类的成员变量和成员函数,如果一个派生类继承多个基类,那么该派生类有多个基类的成员函数
- 如果一个基类的指针或者引用指向派生类,其实是基类的指针或者引用绑定到派生类的基类部分。
- 如果一个基类不想被继承,只要在classname 后面加上final
- 派生类的初始化只能初始化自己的部分,基类的初始化还是由基类自己完成。如果用一个派生类对象对一个基类对象进行赋值或者初始化的时候,派生类中的基类部分被拷贝移动或者赋值。
- 关于访问权限问题,派生类能访问基类的public 和protected成员,基类的private只能是基类自己成员访问呢。
- 继承来说也分为public,protected,private ,public 不对基类做保护。外界可以通过该继承类访问基类的 public成员,protected继承表示对基类做了保护,基类的public在该类中对于外界是protected 外界不能访问,基类子成员在派生类中对外界全部表示为private
- 对于using 的使用来说,可以设置基类的public 和protected 访问权限,将他们设置为相应的权限部分提供using 声明,using 声明语句中成员的访问权限由该声明语句之前的访问说明符决定。
- 如public :using base::fun;
多态
多态是对于一个函数或者运算符进行多个定义,通过上下文来确定具体哪个定义
多态一般分为4种
- 重载多态,这个实在编译器阶段,通过定义函数和运算符进行重载
- 子类型多态,这是在运行阶段,通过虚函数调用
- 参数多态,这个是在编译阶段,通过函数模板或者类模板来实现
- 强制多态,这个事编译或者运行阶段,通过强转,基本类型转换或者自定义类型来实现。
静态多态 对于非虚函数的调用和通过对象进行的虚函数的调用是在编译时绑定。
函数多态 定义一系列具有相同函数名但是参数不同的函数
运行多态 通过引用或者指针调用虚函数时,才会在运行时解析该调用。
虚函数 在基类中以 virtual 关键字标注的函数,提供了一个接口,允许在派生类中对基类的虚函数重新定义。实现了接口重用, 继承通过扩展代码实现了代码重用。