面向对象编程(OOP)的三大特性:封装、继承、多态。
概念
封装是指对象把自己的数据成员和对数据的操作封装在一起;
继承是指子类(派生类)对父类(基类)的继承,子类把父类的数据和对数据的操作继承过来,同时又增添了自己的数据和对数据的操作;
多态同一操作作用于不同对象,产生不同结果。主要体现为函数重载(静态多态,编译时确定)和虚函数(动态多态,运行时确定)。
继承
- 继承权限问题 参看C++权限控制;
- 继承带来的重写、重载、虚函数,后续介绍;
- C++的多继承、菱形继承,后续补充。
重载
- 函数重载
相同函数名字,不同参数列表(含不同数量参数、不同种类参数)或const函数 - 运算符重载
相同的运算符作用于不同对象,产生不同结果。通过operator函数实现。
重写是指子类继承父类成员函数,但是对父类函数进行了重新实现,子类重写父类函数之后没办法直接访问到父类同名函数
与Java中可以通过super访问到父类不同,Java只允许单继承,因此super可以很唯一的指向父类,C++支持多继承,父类可能不止一个。因此,在C++中如果要在子类中访问父类的方法,只能用class::function()的方式进行。
重写、重载、虚函数是设计继承需要考虑的问题。重写之后原来父类的方法子类不能访问;重载则子类可以访问父类的同名成员函数;重写会覆盖父类函数,重载则每个子类必须由自身对象进行调用,无法根据运行时进行灵活选择,因此有了虚函数的概念。
虚函数
子类中出现了和父类相同名字的虚函数也是一种重写,子类重写了父类的虚函数,有关虚函数的细节参考C++中的虚函数