关于多态

来源:互联网 发布:锁屏后能录像的软件 编辑:程序博客网 时间:2024/05/21 15:12

注:结合部分C++相关书籍以及知乎有关多态的回答

1.为什么要提出多态?

  希望在同一个方法中派生类和基类中的行为是不同的。即方法的行为取决于调用该方法的对象是谁。

2.多态是什么?

(从知乎用户ShuanGuan回答这方面相关的问题那“复制”的图,地址:原回答)

 同一函数的不同表现形态。会根据所调用函数的对象类型来执行相应的成员函数。多态一般具有三个条件:①存在继承②父类的引用或者指针指向子类的对象③虚函数。

 编译器对与虚函数采用动态联编,指通常在运行程序时才能确定对象的类型。编译器不会在编译的时候确定对象调用的函数地址,而是在运行的时候再去确认对象的类型以及正确的调用函数(迟绑定)。

3.多态的作用

  增强程序的可扩展性。

4.虚函数与虚指针以及虚表

  *编译器会为每个包含虚函数的类创建一个虚表,该表是一个一维数组,存放每个虚函数的地址。

  *定位虚表:编译器另外为每个类的对象提供了一个虚表指针(vptr),这个指针指向了对象所属类的虚表。

  *虚表初始化:在构造函数中进行虚表的初始化和虚表指针的初始化。

5.虚拟继承是为了解决多重继承下公共基类的多份拷贝的问题。