基本语言细节----虚函数表的演示(基于上篇文章的理论介绍)
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;
};
作者:卧浪居士
以下内容均是在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;
};
相关文章推荐
- 基本语言细节--浅析const用法---基于VC++2012环境验证
- 基本语言细节----构造函数、析构函数与虚函数
- C 语言标准 I/O 函数介绍以及演示程序
- 通过对PHP语言的学习,应该知道它是基于函数的一款HTML脚本语言。庞大的函数库支持着PHP语言功能的实现。下面我们为大家介绍有关PHP函数isset()与empty()的相关用法。
- 基本语言细节--inline函数的几点分析
- C语言文件指针的基本函数介绍包含了fpoen、fclose、fgetc、fputc、fscanf、fprintf、fgets、fputs、fread、fwrite函数以及文件定位函数.
- 基于MyBatis3.0.6的基本操作介绍
- 基于MyBatis3.0.6的基本操作介绍
- 基于SVG的web页面图形绘制API介绍及编程演示
- 网络编程(基于winsocket)-- 常用函数介绍(一)
- 一篇关于虚继承和虚函数介绍的很好的文章
- opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍
- MFC——4个基本类中的成员函数介绍
- CSRF spring mvc 跨站请求伪造防御,使用详解--基于上篇文章
- SRILM--语言模型--N-Gram基本介绍
- C 语言对于文件操作的基本函数
- 基于MyBatis3.0.6的基本操作介绍
- 基于MyBatis3.0.6的基本操作介绍
- 基本语言细节--《深度探索C++对象模型》--(6)Runtime Semantics-总结点
- Base64编码介绍及基于Java语言实现