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

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

    运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。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. Android实例-调用GOOGLE的TTS实现文字转语音(XE7+小米2)(无图)

    注意:在手机上必须选安装文字转语音引擎“google Text To Speech”地址:http://www.shouji56.com/soft/GoogleWenZiZhuanYuYinYinQi ...

  2. 【C语言】- 数据输出-printf( )和putchar( )

    格式化输出函数printf( ) printf( )功能: 向系统指定输出设备按指定的格式输入任意个任意类型的数据,并返回实际输出的字符数.若出错,将返回负数. printf( )使用形式: prin ...

  3. getUTCHours

    getUTCMinutes() 方法可根据世界时 (UTC) 返回时间的分钟字段. function timeFormat(ms){ ; var date = new Date(ms), h = da ...

  4. Arrays.asList的源码分析

    以前一直很奇怪为什么Arrays.asList的数组不能插入新的数据,后来看了源码发现是因为内部是一个final的数组支持起来的Arraylist,下面贴入源码与分析. 1.先看Arrays的方法 我 ...

  5. configparser

    configparser configparser模块是python中用来处理类似于windows的ini格式文件, 一个ini文件的格式 [section] key = value

  6. ajax 返回json数据操作

    例子: $.ajax({ url: "<?=Url::toRoute('add-all-staff')?>", type: 'get', dataType: 'json ...

  7. Android短彩信源码解析-短信发送流程(三)

    3.短信pdu的压缩与封装 相关文章: ------------------------------------------------------------- 1.短信发送上层逻辑 2.短信发送f ...

  8. 剑指OFFER之复杂链表的复制(九度OJ1524)

    题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点). 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一 ...

  9. 剑指OFFER之树的子结构(九度OJ1520)

    题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1< ...

  10. Dev 等待提示 WaitDialogForm 升级版

    本文转载:http://www.cnblogs.com/VincentLuo/archive/2011/12/24/2298916.html   一.Dev的等待提示框                 ...