本文共 483 字,大约阅读时间需要 1 分钟。
注:结合部分C++相关书籍以及知乎有关多态的回答
1.为什么要提出多态?
希望在同一个方法中派生类和基类中的行为是不同的。即方法的行为取决于调用该方法的对象是谁。
2.多态是什么?
(从知乎用户ShuanGuan回答这方面相关的问题那“复制”的图,地址:)
同一函数的不同表现形态。会根据所调用函数的对象类型来执行相应的成员函数。多态一般具有三个条件:①存在继承②父类的引用或者指针指向子类的对象③虚函数。
编译器对与虚函数采用动态联编,指通常在运行程序时才能确定对象的类型。编译器不会在编译的时候确定对象调用的函数地址,而是在运行的时候再去确认对象的类型以及正确的调用函数(迟绑定)。
3.多态的作用
增强程序的可扩展性。
4.虚函数与虚指针以及虚表
*编译器会为每个包含虚函数的类创建一个虚表,该表是一个一维数组,存放每个虚函数的地址。
*定位虚表:编译器另外为每个类的对象提供了一个虚表指针(vptr),这个指针指向了对象所属类的虚表。
*虚表初始化:在构造函数中进行虚表的初始化和虚表指针的初始化。
5.虚拟继承是为了解决多重继承下公共基类的多份拷贝的问题。
转载地址:http://wbtin.baihongyu.com/