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

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

                                                                        作者:卧浪居士            

以下内容均是在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;

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值