C_C++技巧集
源代码在线查看: 回复各位大虾请问对象的多态性指的是什么?.txt
作者:rick1126
email: rickzhang@sina.com
日期:8/23/2001 4:13:13 PM
一般多态性体现在派生类的多层次继承上面体现的, 后绑定提供了机制.
1. 后绑定
就是编译器对于每一个包含虚函数的类创建一个VTable, VTable里面编译器放置特定类的虚函数地址. VPTR是编译器提供的一个指向VTable的指针. 通过基类指针做虚函数调用的时候, 编译器静态插入取得这个VPTR, 在VTable中查找函数地址的代码, 就可以正确地调用函数了.
2. 多态调用
如果一个函数继承自多个具备虚函数的基类, 就是说该派生类对于每一个基类都具备一个VTable的VPTR, 则调用具有多个基类实现版本的虚函数的时候自然会调用相应基类的指针然后获得对应函数实现的代码.
3. 特点
1) 就近原则
如果派生层次为A->B->C 对于C而言, 如果A,B存在同名虚函数, 总是调用父类的虚函数版本
2) 平行继承的二义性
如果 C 同时继承A, B; 则如果AB存在同名虚函数, C的调用就会产生二义性, 在编译器这关就通不过.