关于c++的虚函数表问题
#include <iostream>
using namespace std;
class A{
public:
virtual void g(){
cout << "A::g" << endl;
}
private:
virtual void f(){
cout << "A::f" << endl;
}
};
class B:public A{
void g(){
cout << "B::g" << endl;
}
virtual void h(){
cout << "B::h" << endl;
}
int a;
};
typedef void (*fun)(void);
int main(){
B b;
fun pfun;
for (int i = 0; i < 3; i++){
pfun = (fun)*((int*)*(int*)(&b)+i);
pfun();
}
return 0;
}
上面这段程序,程序运行结果是
B::g
A::f
B::h
我所不能理解的是,在深度理解c++对象模型中讲的是,虚表的第一个位置是类型信息,但是在这里,我却找不到类型信息,那么这个类型信息存放在哪里呢?
...全文
相关推荐
C++ 虚函数表详解
很好的虚函数表解析, 代码,图,文并茂,对多态的理解会非常深刻
C++中的虚函数表图解
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。
C++虚函数表解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际 子类的成员函数。
CPP.rar_多态 .cpp_继承与多态_继承与多态C++
本代码中有:“包含与继承”、“虚函数与多态”、“模板”程序例子
C++ 虚函数表解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。


