不知不觉C++课程的学习已经接近尾声,感觉自己对于c++的认知更近了一步,粗略总结一下最近学习的继承与多态部分的知识。
继承
*C++的继承
继承有3种形式:私有继承、保护继承、公有继承,缺省的继承方式是私有继承。
不论哪种继承方式,派生类都是显示的继承类基的保护成员变量和函数和公有成员变量和函数,继承方式只是限定在派生类中这两种成员变量的访问方式(即访问权限)。私有的成员变量和函数也被继承到派生类中,但是不能被访问,它是隐藏的,在派生类中不可见。
派生类继承基类,除基类的构造函数和析构函数之外,其他的所有都继承。
私有继承:将基类保护和公有的成员变量作为派生类的私有变量,不能在类外访问;
保护继承:将基类保护和公有的成员变量作为派生类的保护变量,不能在类外访问但是可以被继承;
公有继承:将基类保护和公有的成员变量作为派生类的公有变量,可以在类外访问。
在派生类的构造函数的初始化成员列表中显示的调用基类的构造函数,用基类的构造函数构造派生类中的基类部分。
*派生类对象的构造/析构顺序
构造:构造基类成员对象–>构造基类–>构造派生类成员对象–>构造派生类
析构:析构派生类–>析构派生类的成员对象–>析构基类–>析构基类的成员对象
*虚函数
如果派生类继承了有被vritual关键字修饰的函数的基类,被vritual修饰的函数称为虚函数。派生类可以重写该虚函数。如果派生类重写了该虚函数,那么派生类对象调用该方法时调用的就是派生类自己实现的方法。如果派生类没有重写该方法,则调用基类的方法。
*纯虚函数
纯虚函数是特殊的虚函数,基类中不能给出这个虚函数的实现方法,派生类必须给出该函数的实现。这种特殊的函数称为纯虚函数,有纯虚函数的类称为抽象类,抽象类不能实例化对象,但是可以定义抽象类的指针或引用,派生类必须重写方法后才能实例化对象。
*基类的成员方法和派生类的成员方法之间是同名隐藏的关系
基类和派生类继承结构中,函数名、参数列表、返回值都相同,如果基类中的函数是vritual函数,那么派生类中该函数也是vritual函数。如果派生类重新实现了该vritual函数,那么派生类对象调用该方法时调用的就是派生类自己实现的方法。如果派生类没有重写该方法,则调用基类的方法。
*多态
1.多态的实现机制
C++的多态就是基于继承的,多态的实现就是调用虚函数时发生的同名覆盖。当用基类的指针(或引用)指向派生类的对象时,通过该指针(或引用)调用虚方法是动态联编的过程。先找到对象前4个字节的虚函数指针(vbptr),通过vbptr找到虚函数表,虚函数表里有函数的入口地址。
2.C++的静多态和动态多态
静多态是指函数的重载和模板
动多态是指继承中,虚函数的同名覆盖方法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)