一、继承与派生 Inheritance and Derived
二、封装 Encapsulation
隐藏对象的属性和实现细节,仅对外提供公共访问方式。封装体譬如函数,类。
三、赋值兼容
- 子类对象可以赋值给父类对象
- 父类对象不能赋值给子类对象
- 父类的指针/引用可以指向子类对象
- 子类的指针/引用不能指向父类对象(但可以通过强制类型转换完成)
四、转发函数
五、基于static成员的继承
六、虚函数
1.在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便被调用。(在类外定义虚函数时,不必再次定义virtual)
2.在派生类中重新定义此函数,要求函数名,函数类型,函数参数个数和类型全部与基类的虚函数相同,并根据派
生类的需要重新定义函数体。
3.当一个成员函数被声明为虚函数后,其派生类的同名函数都自动成为虚函数。因此在派生类重新声明该
虚函数时,可以加virtual,也可以不加(习惯上添加)。
4.如果再派生类中没有对基类的虚函数重新定义,则派生类简单的继承基类的虚函数。5.定义一个指向基类对象的指针变量,并使它指向同一类族中需要调用该函数的对象,通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。
七、多态 Polymorphism
多态就是指父类引用指向子类对象(对不同对象发送同一消息,不同对象会做出不同反应)
静态多态(编译时多态)
静态多态就是在系统编译期间就可以确定程序执行到这里将要执行哪个函数。
动态多态(运行时多态)
动态多态则是利用虚函数实现了运行时的多态,也就是说在系统编译的时候并不知道程序将要调用哪一个函数,只有在运行到这里的时候才能确定接下来会跳转到哪一个函数的栈帧。在使用基类对象指针调用派生类对象的虚函数的过程中就实现了动态多态。
总结:(摘自https://blog.csdn.net/QQ575787460/article/details/8542660)
应用形式上:
静多态是发散式的,让相同的实现代码应用于不同的场合。
动多态是收敛式的,让不同的实现代码应用于相同的场合。
思维方式上:
静多态是泛型式编程风格,它看重的是算法的普适性。
动多态是对象式编程风格,它看重的是接口和实现的分离度。