您的位置:首页 > 编程语言 > C语言/C++

C++ 虚函数表解析

2014-04-02 14:46 363 查看

虚函数表

class Base {

public:

virtual voif f() {

cout << "Base::f" << endl;

}

virtual void g() {

}

virtual void h() {

}

};

在上面这个类中, 虚函数表是这样设置的



一般继承(无虚函数覆盖)



对于这样的继承关系, 虚函数表的结构是



从上面两张图我们可以看到两点

1. 虚函数按照其声明顺序放在虚函数表中

2. 父亲的虚函数放在孩子的虚函数之前

一般继承(有虚函数覆盖)





从上面两张图中, 我们可以看到两点

1. 覆盖的 f() 函数被放到虚函数原来父函数的位置

2. 其他函数的相对位置不变

多重继承(无虚函数覆盖)





可以看出

1. 每个父类都有自己的虚函数表

2. 子类的成员函数被放到第一个虚函数表

多重继承(有虚函数覆盖)





有了这种表, 我们便可以实现

Derive d;

Base1 *b1 = &d;

Base2 *b2 = &d;

Base3 *b3 = &d;

b1->f(); //Derive::f()

b2->f(); //Derive::f()

b3->f(); //Derive::f()

b1->g(); //Base1::g()

b2->g(); //Base2::g()

b3->g(); //Base3::g()

转自: http://blog.csdn.net/haoel/article/details/1948051
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: