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

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

    运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。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. HW6.17

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  2. python 使用dict和set

    dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字 ...

  3. hdoj 1262 寻找素数对

    寻找素数对 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  4. hdoj 2099 整除的尾数

    整除的尾数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. 转载 GUID介绍

    转载 http://www.cnblogs.com/illele/archive/2008/02/25/1080554.html GUID(Global unique identifier)全局唯一标 ...

  6. Oracle- PL/SQL DEV工具的使用收集

    1.工具---首选项---用户界面---编辑器----定制关键词 里面可以选择关键字是否大写 2.美化代码段,点击菜单edit,然后pl/sql beautifer,快捷键:PL/SQL Develo ...

  7. 4G通信技术LTE介绍

    参考文档在这里 LTE技术 LTE是继GSM/EDGE和UMTS/HSxPA之后的由3GPP推出的移动网络技术最新标准,属于4G. 未来网络需要更高的数据速率,和包路由优化系统.更好的QoA和更廉价的 ...

  8. 知方可补不足~SQL数据库用户的克隆,SQL集群的用户同步问题

    我们知道在为sqlserver建立功能数据库时,通过会为库再建立一个登陆名,而这个登陆名时,只用来管理这个数据库,这是安全的,正确的.

  9. Atom远程连接服务器报错服务器版本和客户端版本不一致

    Atom远程连接服务器 报错信息: Server version is different than client version Original error message: Version mi ...

  10. 【转】SQL语句中的正则表达示

    正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较. MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据. MySQL仅支持 ...