C++的多态机制

(1)编译器会为每个包含虚函数的类构建一个虚函数表vptable,这个表中存放该类对象会调用到的虚函数地址。

(2)当含有虚函数的类创建对象时,编译器会在对象的地址首位置插入指向该虚函数的指针vptr。

(3)如果传递给父类指针的是子类对象地址,那么在调用虚函数时,是通过子类对象的首地址(也是vptr的位置)来找到子类的虚函数表。

(4)如果子类重写了父类的虚函数,在虚函数表的相应位置,指向的是重写后的虚函数地址。

调用它,从而实现了多态。上述四个前提条件,保证了多态机制。

C++是支持多重继承的。

如果子类继承了多个父类,那么如何实现多态呢?

1)该子类有多个虚函数表;

2)由该类创建的对象,在其首地址位置下面有多个虚函数表指针,排列顺序是与继承顺序相一致;

3)当把子类对象传递给父类的指针时,编译器会根据对应的虚函数表指针来访问虚函数表,从而找到将要调用的虚函数地址。

 

你可能感兴趣的:(C/C++,C++,C++多态机制,虚函数表)