1.封装
封装是把对象的全部属性和行为结合成一个独立的单位,并尽可能隐蔽对象内部的细节,降低了系统的复杂性,提供了代码的重用性
2.继承
它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。继承的目的是为了实现多态
3.多态
允许将子类类型的指针赋值给父类类型的指针,一个接口,多种实现
静态编译时的多态性,编译时的多态性是通过重载来实现的
动态运行时的多态性,运行时的多态性是通过虚成员实现的
4.虚函数
虚函数的实现:在有虚函数的类中,类的最开始部分是一个虚函数表的指针,这个指针指向一个虚函数表,表中放了虚函数的地址,实际的虚函数在代码段中,当子类继承父类的时候也会继承其虚函数的表,当子类重写父类中虚函数的时候,会将集成到的虚函数表中的地址替换为重新写的函数地址,使用了虚函数,会增加访问内存开销,降低效率
单继承:如果有虚函数表,那么只有一个虚函数表,并且按照虚函数声明的顺序顺序排列,派生类的虚函数紧接着基类的虚函数排列
多重继承:多继承中会有多个虚函数表,几重继承就会有几个虚函数表。这些虚函数表会按照派生的顺序依次排列。如果子类改写了父类的虚函数,那么就会用子类自己的虚函数覆盖相应的父类虚函数;如果子类有新的虚函数,那么就添加到第一个虚函数表的末尾