多态性:统一操作作用于不同的对象可以有不同的解释,产生不同的执行结果。多态性可以分为两种:一是编译时的多态性,一是运行时的多态性。

    编译时的多态性包括重载、覆盖、运算符重载。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

    运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C++中运行时的多态性使用虚函数和纯虚函数(抽象方法)。

1 重载与覆盖

    下表列举了重载与覆盖的区别:
 

重载(overload)

覆盖(override)

存在情况

存在同一个类或主文件中

存在类继承关系中

函数名

必须相同

必须相同

参数列表

不能相同

必须相同

返回值类型

可以不相同

必须相同

    函数签名包括函数名和参数列表。函数重载要求两个函数的函数签名不能完全相同,但是函数名必须是相同的,所以参数列表不得相同。函数的返回值类型不是函数签名的组成部分。在C++和C#中,函数的重载大致是相同的。

    对于覆盖,C++和C#有所区别。C#中的覆盖称为隐藏基类方法,用new关键字修饰派生类中和基类同名的方法。例如:public new void Output()。

2 虚函数和抽象方法

    C++中的虚函数使用关键字virtual修饰的函数。纯虚函数是不给出函数体且形如public: virtual void Output()=0的虚函数。C++中如果某个类中定义了一个虚函数,那么在派生类中无论是否定义该函数的覆盖函数,该函数都是虚函数(在定义覆盖的函数时最好加上virtual关键字)。拥有纯虚函数的类在C++中被称为抽象类。C++中不能声明抽象类型的对象,抽象类只能被继承,然后在派生类中实现覆盖函数。

    C#中与之类似,可以用virtual来修饰类成员方法,但是在派生类中覆盖该方法时一定要用override关键字来修饰覆盖方法。abstract关键字被用来修饰类和方法,称为抽象类和抽象方法。抽象类中可以包含非抽象方法,抽象类中一般包含至少一个抽象方法。抽象方法必须被包含在抽象类中。抽象类中的抽象方法在派生的非抽象类中必须被实现,并且用override关键字来修饰实现的方法。如果派生类是抽象类则可以不给出实现。

C++多态性与C#的比较的更多相关文章

  1. javaScript的原型继承与多态性

    1.prototype 我们可以简单的把prototype看做是一个模版,新创建的自定义对象都是这个模版(prototype)的一个拷贝 (实际上不是拷贝而是链接,只不过这种链接是不可见,给人们的感觉 ...

  2. Java多态性——分派

    一.基本概念 Java是一门面向对象的程序设计语言,因为Java具备面向对象的三个基本特征:封装.继承和多态.这三个特征并不是各自独立的,从一定角度上看,封装和继承几乎都是为多态而准备的.多态性主要体 ...

  3. 【C++】多态性(函数重载与虚函数)

    多态性就是同一符号或名字在不同情况下具有不同解释的现象.多态性有两种表现形式: 编译时多态性:同一对象收到相同的消息却产生不同的函数调用,一般通过函数重载来实现,在编译时就实现了绑定,属于静态绑定. ...

  4. java多态性,父类引用指向子类对象

    父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new C ...

  5. 『c++』 模板(template)--- 参数化多态性

    ---恢复内容开始--- 题外话: 模板机制的设计和细节是由Bjarne Stroustrup在其1988年10月发表的名为“Parameterized Types for C++”一文中披露的. 引 ...

  6. Java对象的多态性(转型)

    多态性在面向对象中主要有两种体现: <1>方法的重载与覆写 <2>对象的多态性 对象的多态性:向上转型:子类对象-->父类对象,向上转型会自动完成 向下转型:父类对象-- ...

  7. 【转】C++多态性

    ----转自http://blog.csdn.net/hackbuteer1/article/details/7475622 C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言.我们今天就 ...

  8. 浅谈C++多态性

    本文转载至http://blog.csdn.net/hackbuteer1/article/details/7475622 总结: (1)区分概念:    重载----同一个类中,相同的函数名字,不同 ...

  9. Java基础之在窗口中绘图——利用多态性使用鼠标自由绘图(Sketcher 7 with a crosshair cursor)

    控制台程序. 在Sketcher中创建形状时,并不知道应该以什么顺序创建不同类型的形状,这完全取决于使用Sketcher程序生成草图的人.因此需要绘制形状,对它们执行其他操作而不必知道图形是什么.当然 ...

  10. java多态性

    多态分两种: (1)   编译时多态(设计时多态):方法重载. (2)   运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态.(我们平时说得多的事运行时 ...

随机推荐

  1. 【转】Spark是基于内存的分布式计算引擎

    Spark是基于内存的分布式计算引擎,以处理的高效和稳定著称.然而在实际的应用开发过程中,开发者还是会遇到种种问题,其中一大类就是和性能相关.在本文中,笔者将结合自身实践,谈谈如何尽可能地提高应用程序 ...

  2. RHEL6.x 删除Oracle11g

    1.停止数据库 $sqlplus /nolog SQL>conn /as sysdba SQL>shutdown immediate 2.停止Listener $lsnrctl stop ...

  3. 【现代程序设计】【homework-03】【11061027】

    Q:你现在使用的代码规范是什么,  和上课前有什么改进? A: 代码规范........自定义的代码规范算 代码规范吗.....   Q:你的同伴有哪些优点 (列出至少三点), 和那些需要改进的地方 ...

  4. Android实例-程序界面内截取屏幕(XE8+小米2)

    结果: 1.只能截取程序界面内的图片. 2.图片有点不清楚,自己设置清楚度. 实例代码: unit Unit1; interface uses System.SysUtils, System.Type ...

  5. SpringMVC(二)

    今天在完成的工作的前提下,最终在睡觉前将SpringMVC和Mybatis整合了~~~ 其实就是按照从网上(参考http://www.toutiao.com/a6332703083554324737/ ...

  6. 【Away3D代码解读】(二):渲染核心流程(简介、实体对象收集)

    我之前解析过Starling的核心渲染流程,相比Away3D而言Starling真的是足够简单,不过幸运的是两者的渲染流程是大体上相似的:Starling的渲染是每帧调用Starling类中的rend ...

  7. 框架中web.xml中配置文件解析

    1.XSS指跨站脚本攻击 xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在 ...

  8. Android获唯一标识

    Android开发中有时候因业务需要客户端要产生一个唯一的标识符使服务器能识别某台Android设备,目前一般使用三种标识符分别为 DeviceId . AndroidId . MAC地址 . 获取D ...

  9. 安卓Android控件ListView获取item中EditText值

    可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写Ba ...

  10. 【转】linux中的sort命令

    转自:http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分 ...