C++多态

原创 2018年04月15日 22:15:40

C++多态表现形式主要有函数重载、运算符重载和虚函数等,其中函数重载、运算符重载是静态多态,虚函数是动态多态。也就是说,C++中运行时的多态性主要是通过虚函数重载来实现的。

1.静态多态

静态链编或早绑定:编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用哪个函数,如果有对应的函数就调用该函数,否则出现编译错误。

2.动态多态

动态链编或晚绑定:在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调相应的方法。

使用virtual关键字修饰类的成员函数时,指明该函数为虚函数,派生类需要重新实现,编译器将实现动态绑定。

动态绑定的条件:(1)必须是虚函数(任何构造函数之外的非静态函数都可以是虚函数

                            (2)通过基类类型的引用或者指针调用函数

注意:如果派生类的函数与基类同名,但是参数不同,此时,不论有无virtual关键字,基类的函数将被隐藏。

         如果派生类的函数与基类同名,并且参数也相同,但是基类函数没有virtual关键字,此时,基类的函数将被隐藏。

        派生类重写了基类中的虚函数,则派生类对象的虚表会替换基类中的虚函数,即基类的虚函数被派生类重写的虚函数覆盖了。

        派生类先拷贝基类的虚表,若派生类没有重写虚函数,则虚表与基类的相同,若重写了虚函数,则派生类会将基类相同位置上的虚函数覆盖,再在虚表后面加上派生类自己的虚函数。(基类和派生类用的不是一张虚表)


《赤壁》学习笔记(一)

早就听说《赤壁》游戏是在国产游戏中的先驱,后来听说销售情况不是很好,干脆就把源码卖了,也就是业内人士常说的《G档案》。我费尽千辛万苦,在网上下载到了源码和标准版的游戏执行档。  分析了CBMain.C...
  • ysb
  • ysb
  • 2002-07-06 23:29:00
  • 1648

c++ 多态实例总结

1  如果基类和派生类都加了
  • wswxfwps
  • wswxfwps
  • 2014-08-15 17:39:46
  • 1003

C++ — 多态基础面试题集锦

多态面试题集锦 什么是多态 答:多态是面向对象的重要特性之一,它是一种行为的封装,是同一种事物所表现出的多种形态,简单地说是”一个接口多种实现“ 多态的作用 答:多态技术允许将父类设置成...
  • Dawn_sf
  • Dawn_sf
  • 2017-04-03 08:56:06
  • 1576

C++多态的概念以及用途(通俗易懂)

基类的指针也可以指向派生类对象,请看下面的例子: #include using namespace std;//基类Peopleclass People{public: People(...
  • zhanghow
  • zhanghow
  • 2016-12-12 21:22:35
  • 2177

20170326_请说出C++多态的含义

20170326_请说出C++多态的含义
  • cmm0401
  • cmm0401
  • 2017-03-26 10:18:50
  • 3453

c++多态总结

概述Parent *p = new Child();//父类指针指向子类对象 p->print();//编译器为了安全会调用父类方法 我们希望父类对象调用父类方法,子类对象调用子类方法。因此,引入...
  • sjtu_chenchen
  • sjtu_chenchen
  • 2015-08-27 23:06:07
  • 1733

C++学习笔记之多态(虚函数)

多态可以分为静态的多态和动态多态,静态多态即所谓的函数重载,在编译阶段即可确定是使用哪个函数。动态多态是通过虚函数来实现的,并基于类的继承来表现。 在使用过程中应注意以下几点: 1、虚函数使用过程中,...
  • ljp1919
  • ljp1919
  • 2015-10-03 15:16:16
  • 1140

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

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

C/C++继承类的多态表现

学过C++和Java的人都知道,他们二者由于都可以进行面向对象编程,而面向对象编程的三大特性就是封装、继承、多态,所有今天我们就来简单了解一下C++和Java在多态这方面的不同。 首先我们各看一个案...
  • dongxianfei
  • dongxianfei
  • 2016-12-29 16:14:48
  • 1033

C++多态与可变参数混搭的奇妙之处

#include #include class A { public: A(){} ~A(){} virtual void fun(int n, ...) { printf("A.f...
  • poduoduopo
  • poduoduopo
  • 2016-03-05 21:39:10
  • 419
收藏助手
不良信息举报
您举报文章:C++多态
举报原因:
原因补充:

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