C++是从C语言发展过来的一种面向对象编程语言,C语言是面向过程的,关注的是过程,通过分析求解问题的步骤并且通过函数调用逐步解决问题。但是问题的规模比较复杂的时候,面向过程的思想不能满足需求,就产生了面向对象的编程思想。
面向对象关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互解决问题。
面向对象的三大特性:封装、继承、多态
封装就是将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。一方面可以保护对象的数据,另一方面使对象成为相对独立的功能模块。
继承是类层次的复用,在保持原有类特性的基础上进行扩展,增加功能,产生新的类称派生类。
继承的方式有公有、保护、私有继承,实际中公有继承用的比较多。
因为C++允许多继承,有时候会出现数据冗余的二义性的问题,所以又有了虚拟继承,它是通过在虚基表里存偏移量实现的。
多态是不同继承关系的类对象,去调用同一函数,产生了不同的行为
构成多态有两个条件:
- 必须通过基类的指针或者引用调用虚函数
- 派生类必须对基类的虚函数进行了重写
多态是通过虚表实现的
一个含有虚函数的类中都有虚函数表指针,虚函数的地址放在虚函数表中,调用的时候通过this指针找到虚表指针,再到虚表里找到对应的虚函数。