C++总结(四):虚函数和多态

原创 2007年10月08日 21:32:00
.静态联编与动态联编由于函数重载的存在,当程序中出现调用同名函数时,编译器会根据函数的参数类型、个数决定调用执行哪一个同名函数的代码,这种把一个函数的调用与适当的函数实现代码联系在一起的过程,叫做联编。根据联编的实现阶段的不同,可将其分为静态联编和动态联编两种。
静态联编是在程序编译阶段确定一个函数调用与函数实现代码间的对应关系,这种对应关系确定下来后,在程序运行过程中就根据这个对应关系去调用执行相应的函数代码,并且这种对应关系在程序运行过程中始终保持不变。
而动态联编是在编译阶段不能决定执行哪个同名的被调函数,只在程序运行过程中根据需要处理的对象类型来决定执行哪个类的成员函数。

2.多态性

所谓多态性就是指同样的消息被类的不同对象接收时导致的完全不同的行为的一种现象。这里所说的消息即对类的成员函数的调用。
函数的重载可以实现多态性,也可通过虚函数来实现的,而虚函数又必须存在于继承的环境下
C++语言支持两种类型的多态:一种是编译时的多态(静态多态),另一种是运行时的多态(动态多态)。在编译时的多态是通过静态联编实现的,而在运行时的多态则是通过动态联编实现的。

3.虚函数

声明虚函数的方法是在基类中的成员函数原型前加上关键字virtual。格式如下:
class 类名{
   ……
   virtual 类型 函数名(参数表);
   ……
};
当一个类的成员函数声明为虚函数后,这就意味着该成员函数在派生类中可能有不同的实现,也就是说,该函数在派生类中可能需要定义与其基类虚函数原型相同的函数。
虚函数是动态联编的基础,当用基类类型的指针或引用的方法指向不同派生类对象时,系统会在程序运行中根据所指向对象的不同自动选择适当的函数,从而实现了运行时的多态性。
当通过基类指针或引用标识对象并调用成员函数时,由于基类指针可以指向该基类的不同派生类对象,因此存在需要动态联编的可能性,但具体是否使用动态联编,还要看所调用的是否是虚函数。
虚函数可以在一个或多个派生类中被重新定义,但它要求在派生类中重新定义时必须与基类中的函数原型完全相同,包括函数名、返回值类型、参数个数和参数类型的顺序。
只有类的成员函数才能声明为虚函数,但类的构造函数以及全局函数和静态成员函数不能声明为虚函数。

4.用基类指针指向公有派生类对象

指向基类的指针自然可以指向其公有派生类的对象。但是,由于基类指针本身的类型并没有改变,因此,基类指针仅能访问派生类中的基类部分。

5.纯虚函数与抽象类

在定义一个表达抽象概念的基类时,有时可能会无法给出某些成员函数的具体实现。这时,就可以将这些函数声明为纯虚函数。
纯需函数的声明格式如下:
virtual 类型 函数名(参数表)=0;
声明了纯虚函数的基类只是用于继承,仅作为一个接口,具体功能在其派生类中实现。
声明了纯虚函数的类,称为抽象类。抽象类只能用作基类来派生新类,而不能用来创建对象。
 

C++ 多重继承 虚继承 虚函数表 多态

C++中的多重继承和虚继承是一个非常重要的概念,也是看你是不是懂C++的一个重要的标志之一。这中间包括了运行时多态,虚函数表等等相关概念。 多重继承,顾名思义,是一个类继承了多个父类。例如class...
  • Troy_Wu
  • Troy_Wu
  • 2016年03月25日 15:05
  • 1944

【c++知识归纳】继承与多态(一)

c++是基于面向对象的编程语言,面向对象的三大特性为:封装、继承和多态。本文将我对继承与多态的理解进行了总结归纳,这部分内容对于学习c++编程语言是非常重要的,文章加入我的个人理解,希望能给大家带来帮...
  • XHfight
  • XHfight
  • 2016年08月24日 02:45
  • 1236

C++学习之多态篇(虚函数和虚析构函数的实现原理--虚函数表)

通过下面的代码来说明: #include #include #include using namespace std; /**  *  定义动物类:Animal  *  成员函数:eat()...
  • hudfang
  • hudfang
  • 2016年01月26日 18:13
  • 1666

C++ 虚函数与多态 教学PPT

  • 2010年10月25日 20:06
  • 687KB
  • 下载

C++虚函数和多态学习笔记

  • 2007年08月31日 13:31
  • 37KB
  • 下载

C/C++日常学习总结(第五篇)多态和虚函数的访问

1.多态性 多态性分为静态多态性和动态多态性
  • wu_123_456
  • wu_123_456
  • 2014年04月25日 13:25
  • 475

C++ 知识点(四):面向对象编程:多态,虚函数,数据抽象,数据封装,抽象类

C++ 多态多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。下面的实例中,基...
  • Jurbo
  • Jurbo
  • 2016年09月06日 21:24
  • 1227

C++中类的多态和虚函数的使用

C++的三大特性:封装、继承和多态。   (一)这里主要讨论多态:   类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多...
  • yx20130919
  • yx20130919
  • 2016年06月15日 17:00
  • 127

C++中对纯虚函数和多态的理解

    抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层。       ⑴抽象类的定义:       称带有纯虚函数的类为抽象类。     ...
  • zhanghuaichao
  • zhanghuaichao
  • 2016年10月10日 16:11
  • 721

<C++略识>之多态和虚函数

1. 什么是多态?** 书本上关于多态的解释:指相同对象收到不同消息或不同对象收到相同消息时产生不同的动作。 ** VincentCZW在《C++中虚函数和多态》中的解释:关于多态,简而言之就是用父...
  • u013003827
  • u013003827
  • 2016年07月22日 23:09
  • 129
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++总结(四):虚函数和多态
举报原因:
原因补充:

(最多只允许输入30个字)