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

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

    运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。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. A Tour of Go Switch with no condition

    Switch without a condition is the same as switch true. This construct can be a clean way to write lo ...

  2. Android开发中常用的Eclipse快捷键

    关闭所有窗口Ctrl + Shift + W  关闭所有已打开的编辑窗口 重命名Alt + Shift + R    文件或变量重命名(先选中文件或变量再同时按下快捷键) 快速引包Ctrl + Shi ...

  3. Cocos2d-x 3.x学习笔记(一):开始Cocos2d之旅

    首先,进入官网下载cocos2d-x:http://www.cocos.com/download/,当然你需要注册一个账号才可以下载. 接下来需要跟着官网的配置文档配置一下开发环境,不得不说,Coco ...

  4. 分布式模式之broker模式

    转自:http://blog.chinaunix.net/uid-23093301-id-90459.html 问题来源: 创建一个游戏系统,其将运行在互联网的环境中.客户端通过WWW服务或特定的客户 ...

  5. CentOS6.5安装nginx及负载均衡配置

    所有的安装包可以去以下地址下载,或者自行去官网下载,下面都有介绍. 所有安装包地址:http://download.csdn.net/detail/carboncomputer/9238037 原文地 ...

  6. 如何检查机器是否因为装了Windows更新而需要重新启动

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何检查机器是否因为装了Windows更新而需要重新启动.

  7. Android设计模式系列--模板方法模式

    模板方法,和单例模式是我认为GOF的23中最简单的两种模式.但是我个人对模板方法的经典思想特别推崇,虽然模板方法在大对数情况下并不被推荐使用,但是这种通过父类调用子类的方法,使用继承来改变算法的一部分 ...

  8. 简单的谈一下.NET下的AOP

    AOP有着它优良的好处, 从一个层面上去关心一个问题, .NET对此有良好的支持.如果硬生生的看MSDN不理解里面的思想是有掉入深渊的感觉的. 为了理解AOP的机制, 我们从需求开始说起,实现AOP就 ...

  9. Aizu 2306 Rabbit Party DFS

    Rabbit Party Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view. ...

  10. com.opensymphony.xwork2.ActionSupport类源码

    version : xwork-2.1.0 /* * Copyright (c) 2002-2006 by OpenSymphony * All rights reserved. */ package ...