C语言中虚函数研究
C语言中虚函数研究
摘 要:虚函数是面向对象的C++??语言中的一个非常重要的概念。它充分体现了面向对象思想中的继承和多态性这两大特性,动态绑定是C++??中实现多态的一个重要途径,虚函数是动态绑定的基础。通过深入分析VC++??编译器实现虚函数的汇编代码。给出在继承下的实现模型,并结合实例,在汇编语言层次研究了多态性的实现机理,揭示了虚函数和动态绑定的本质。
关键词:虚函数;多态性;绑定;构造函数
中图分类号:TP312文献标识码:A
文章编号:1004-373X(2010)04-154-03
Study of Virtual Function in C++??
XU Qifeng,HU Yong,WANG Yucheng
(Xuzhou Air Force College,Xuzhou,221000,China)
Abstract:Virtual Function is an important concept of object oriented language C++??.It presents the Inheritance and Polymorphism of the idea in object oriented language,dynamic binding is an important approach to realize polymorphism in C++?? and virtual function is its foundation,this paper investigates the realization mechanism of virtual function in assemble language in VC++??.According to inheritance relationship,the realize model of polymorphism is studied by example and in assemble language,and reveals the essence of virtual function and dynamic binding .
Keywords:virtual function;polymorphism;bind;constructor
0 引 言
多态性是面向对象程序设计语言继数据抽象和继承之后的第三个基本特征[1,2],在C++??语言中,多态性是用虚函数来实现的[3,4],如果某类中的一个成员函数被说明为虚函数,该类被称为多态类,这就意味着该成员函数在派生类中可以有不同的实现,当用一个基类指针或引用指向一个继承类对象调用虚函数的时候,实际调用的是继承类版本的虚函数。
绑定是指把函数定义体与函数调用相联接的过程,按照绑定所进行的阶段不同,可分为两种不同的绑定方法:静态绑定和动态绑定[5,6],静态绑定是传统的过程式程序设计语言所使用的方法,即函数定义体和函数调用间的联接发生在编译连接阶段,这种联编又称早期绑定,因为绑定过程是在程序开始运行之前完成的。静态绑定的优点是有效性,即速度快,所需内存小,易实现代码优化,主要缺点是缺乏灵活性。与静态绑定相对应的是动态绑定,动态绑定意味着函数调用与函数定义体的联接是在程序运行是进行的,即在编译时,编译器不能确定某一对象实体与具体那个函数调用相联接,必须在运行时刻根据上下文关系来确定[7]。动态绑定也叫晚期绑定,动态绑定以效率性来换取灵活性。在C++??语言中,当使用基类指针或引用调用虚函数采用的就是动态绑定的方式[8],即根据基类指针或引用的动态类型(指针或引用所指向或引用对象的类型)选择相应的虚函数版本,而不是根据基类指针或引用的静态类型(声明指针或引用时所使用的类型)来选择函数版本,从而给程序带来了多态性[9-11]。
1 虚函数的实现机理
下面从一个具体的程序来分析虚函数的实现机理,程序如下,在Visual C++?? 6.0编译器下运行。
#include
using namespace std;
class CBase
{
public:
int Base_x;
virtual void vFun1();
virtual void vFun2();
void Fun3();
};
void CBase::vFun1()
{
cout << "CBase::vFun1()"<
}
void CBase::vFun2()
{
cout <