您的位置:首页 > 其它

基本语言细节----虚函数表的演示(基于上篇文章的理论介绍)

2013-11-19 14:21 253 查看
基本语言细节----虚函数表的演示(基于上篇文章的理论介绍)

作者:卧浪居士

以下内容均是在VS2012中测试所得:

设计三个类 A,C,B;

(1)B以单独形式出现,不继承类A、C,观察其对象模型如下图。



(2)B以公有继承的方式继承A、C,其对象模型如下图所示:






由 (1)、(2)可知:

1.类的成员函数不在对象内。(这与深入探索C++对象模型描述一致)

2.虚函数表用指向指针的指针来实现的。

3.带有虚函数的类,单独出现时均有虚函数表,但是在继承后,子类中独有的虚函数表消失,而只剩下基类的虚函数表,并且基类的虚函数表,按照子类继承基类的定义顺序排列。

4.虚函数表内存放的是虚函数的函数指针。(要么是改写的,要么是未被改写的)

卧浪居士 于HUST2013.11.19

附录:

class A

{

public:

A()

{

}

virtual void print1 ()

{

cout<<" A 1 ";

}

virtual void print2 ()

{

cout<<2<<"A 2 ";

}

virtual void print3 ()

{

cout<<3<<"A 3 ";

}

protected:

private:

int n1;

int n2;

};

class C

{

public:

C()

{

n2=0;

n1=n2+2;

}

public:

virtual void print4 ()

{

cout<<" C 4 ";

}

virtual void print5 ()

{

cout<<" C5 ";

}

virtual void print6 ()

{

cout<<3<<" C6 ";

}

protected:

private:

int n1;

int n2;

};

class B :public A,public C

{

virtual void print7 ()

{

cout<<"B 7";

}

virtual void print8 ()

{

cout<<"B 8";

}

virtual void print9 ()

{

cout<<"B 9";

}

void printB()

{

cout<<"Member function";

}

private:

int n3;

int n4;

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: