精华内容
下载资源
问答
  • C++多态之包含多态

    千次阅读 2013-06-14 23:21:15
    C++中的多态是一个重要的内容,多态分为四类:重载多态,强制多态,包含多态,参数多态!其中重载多态,强制多态这两种又被称为专用多态,而包含多态,参数多态这两种多态被称为通用多态! 多态从实现的角度来说...

    C++中的多态是一个重要的内容,多态分为四类:重载多态,强制多态,包含多态,参数多态!其中重载多态,强制多态这两种又被称为专用多态,而包含多态,参数多态这两种多态被称为通用多态!

    多态从实现的角度来说分为两类:编译时的多态和运行时的多态。

    这次主要研究了通用多态中的包含多态!

    说到包含多态,则虚函数就是不可或缺的主角了,虚函数是动态绑定的基础,什么是绑定呢?确定操作的具体对象的过程就是绑定,按照绑定进行的阶段不同又分为静态绑定(绑定过程出现在编译阶段,用对象名或者类名来限定要调用的函数)和动态绑定(绑定过程工作在程序运行时执行,在程序运行时才确定将要调用的函数)


    虚函数必须为非静态的成员函数、PS:我想应该是因为虚函数是实现运行中的多态的吧,即动态绑定,所以应该为非静态成员函数。这里又想到一个知识点,友元函数为非成员函数!!


    虚函数【例子 P317 例8-4】

    一般虚函数成员声明:

          virtual  函数类型 函数名(形参表)

    victual 只能出现在虚函数的原型声明中,不得出现在函数实现的时候,虚函数一般不声明为内联函数。具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
    本质:不是重载声明而是覆盖。

    调用方式:通过基类指针或引用,执行时会 根据指针指向的对象的类,决定调用哪个函数。


    没有虚构造函数,只有虚析构函数!!!!!

    虚析构函数【例子 P320 例8-5】

    虚析构函数的声明为:

    victual ~类名()

    如果一个类的析构函数为虚函数,则派生出的子类的析构函数也为虚析构函数。


    纯虚函数【例子:P323 例8-6】

    是一个在基类中定义为虚函数,但它在该基类中没有定义具体的操作内容,要各派生类根据实际需要给出各自的定义

    纯虚函数声明如下:

        virtual 类型 函数名(参数表)=0; 

    PS:纯虚函数和空的虚函数不一样

       1,纯虚函数根本没有函数体                                  空的虚函数的函数体为空

       2,纯虚函数所在的类为抽象类,不能实例化         空的虚函数是可以实例化的

    相同点:都可以派生出新的类,然后在新类中给出虚函数新的实现(可具有多态特征)


    抽象类:带有纯虚函数的类        不能实例化


    class  类名
     {
         virtual 类型 函数名(参数表)=0; 
                                                             //纯虚函数
         ...
    }

    注:

    抽象类只能作为基类来使用。
    不能声明抽象类的对象。
    构造函数不能是虚函数,析构函数可以是虚函数

    展开全文
  • 参数多态、包含多态、过载多态和强制多态

    千次阅读 热门讨论 2015-11-02 09:11:15
    多态分为两种:通用的多态和特定的多态。... 通用多态又分为参数多态(parametric)和包含多态(Inclusion Polymorphism);特定多态分为过载多态(overloading)和强制多态(coercion)。  强制多态

        多态分为两种:通用的多态和特定的多态。两者的区别是前者对工作的类型不加限制,允许对不同类型的值执行相同的代码;后者只对有限数量的类型有效,而且对不同类型的值可能要执行不同的代码。

        通用多态又分为参数多态(parametric)和包含多态(Inclusion Polymorphism);特定多态分为过载多态(overloading)和强制多态(coercion)。

        强制多态(coercion):编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。程序设计语言中基本类型的大多数操作符,在发生不同类型的数据进行混合运算时,编译程序一般都会进行强制多态。程序员也可以显示地进行强制多态的操作(Casting)。举个例子,比如,int+double,编译系统一般会把int转换为double,然后执行double+double运算,这个int-》double的转换,就实现了强制多态,即可是隐式的,也可显式转换。

        过载多态(overloading):同一个名(操作符﹑函数名)在不同的上下文中有不同的类型。程序设计语言中基本类型的大多数操作符都是过载多态的。通俗的讲法,就是c++中的函数重载。在此处中“overload”译为“过载”,其实就是所谓的“重载”,也许“overload”就应翻译为“过载,重载”吧,那“override”就只能是“覆盖”了。

        包含多态(Inclusion Polymorphism):同样的操作可用于一个类型及其子类型。(注意是子类型,不是子类。)包含多态一般需要进行运行时的类型检查。

        需要注意的地方:包含多态的操作存在着逆单调(Anti-mornotonic)。即一个类型t上的操作,当其定义域缩小成t的一个子类型时,其值域应不小于t.

     参数多态(parametric),采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型。(类似模板类吧!)


    展开全文
  • 1. 通用多态 a.参数多态:模板。 b.包含多态:virtual。 2. 特定多态 a.重载多态: b.强制多态:强制类型转换。

    1.

    通用多态

    a.参数多态:模板。

    b.包含多态:virtual。


    2.

    特定多态

    a.重载多态:

    b.强制多态:强制类型转换。


    展开全文
  • 多态分类:强制多态、参数多态、过载多态、包含多态的理解   多态分为两种:通用的多态和特定的多态。两者的区别是前者对工作的类型不加限制,允许对不同类型的值执行相同的代码;后者只对有限数量的类型有效,...

    多态分类:强制多态、参数多态、过载多态、包含多态的理解

     

    多态分为两种:通用的多态特定的多态。两者的区别是前者对工作的类型不加限制,允许对不同类型的值执行相同的代码;后者只对有限数量的类型有效,而且对不同类型的值可能要执行不同的代码。

    通用的多态又分为参数多态(parametric)和包含多态(inclusion);

    特定的多态分为过载多态(overloading)和强制多态(coercion)。

     

    • 强制多态:

    编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。程序设计语言中基本类型的大多数操作符,在发生不同类型的数据进行混合运算时,编译程序一般都会进行强制多态。程序员也可以显示地进行强制多态的操作(Casting)。举个例子,比如,int+double,编译系统一般会把int转换为double,然后执行double+double运算,这个int-》double的转换,就实现了强制多态,即可是隐式的,也可显式转换。

     

    • 过载(overloading)多态:

    同一个名(操作符﹑函数名)在不同的上下文中有不同的类型。程序设计语言中基本类型的大多数操作符都是过载多态的。通俗的讲法,就是c++中的函数重载。在此处中“overload”译为“过载”,其实就是所谓的“重载”,也许“overload”就应翻译为“过载,重载”吧,那“override”就只能是“覆盖”了。

     

    • 参数多态:

    采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型。模板、泛型

     

    • 包含多态:

    同样的操作可用于一个类型及其子类型。(注意是子类型,不是子类。)包含多态一般需要进行运行时的类型检查。virtual、override机制。

    展开全文
  • 多态--包含多态

    千次阅读 2007-05-21 08:12:00
    #includeiostream.h>//演示包含多态(覆盖)class Parent{public: void test() { cout()" }};class Child: public Parent{public: void test()//改写了继承下来的test() { cout }};void main(){ 
  • 一、前言 多态在面向对象中起着非常重要的作用。多态性的官方介绍是作用于不同的对象的同一操作可以有不同的解释,从而产生了不同的结果。翻译过来就是:用同一个方法对不同的人操作有不一样的结果。二、分类 多态...
  • C++>多态,强制多态,参数类型多态,重载多态,包含多态(运行时多态),联编(早期联编,滞后联编),虚函数,虚函数重写(覆盖),函数重载、覆盖、隐藏的比较,抽象类,虚函数表。),)
  • 我们分三个方面来说明虚函数以及用虚函数实现的包含多态。 第一个:什么是虚函数? 从语法上来说虚函数就是用virtual 声明的函数。所以定义一个虚函数很简单。重点是你需要知道我们如何用虚函数解决实际的问题。 ...
  • 面试被问及多态种类,原来倒是在课本上看到过,不过早忘没影了,郁闷哎,回来查了下,转载日志一篇 关于多态的分类,网上的理解比较多,比较乱,但是大多好像是基于《On Understanding Types, Data Abstraction, ...
  • 关于多态的分类,网上的理解比较多,比较乱,但是大多好像是基于《On Understanding Types, Data Abstraction, and Polymorphism》中对多态的分类和理解,本文也是我基于此概念的个人理解,不知是否作者本意。 多态...
  • C++学习------包含多态的例子

    千次阅读 2007-06-16 11:21:00
    这是在网上找的一个包含多态的例子,总是感觉不是很好,就先这样理解一下吧。#includeiostream.h>//演示包含多态(覆盖)class Parent{public: void test() { cout()" }};class Child: public Parent{public:...
  • 上一篇写了一种二进制读写含多态的派生类的方法了,这次发散思路再写一种。 先写好派生类: class a { public: int m; a(int m1) { m = m1; } virtual void MsgBox() { cout << "It's a." <<...
  • 面向对象之多态 1、多态:一类事物有多种形态(最好依赖于继承,但不必须) 1.1、定义:多态是一种使用对象的方式,子类重写父类中的方法,调用不同子类对象的相同父类方法,可以产生不同的执行结果。 1.2、优点...
  • import javax.sound.midi.Soundbank; /** * @Author:xiaoyang01 ... * 数组存储对象名,进行多态! * */ //main方法 public static void main(String[] args){ /*//静态数组 Bank bank01 = new Bank();.
  • 二进制文件的优势在于效率高,占用小,但不可直接读取,对于量大又需要隐藏信息的存储来说很实用。既然是读写内存数据流,那我们就可以对类对象进行读写操作,而派生...这样就可以完成有多态的派生类的读写操作了。
  • 多态

    2019-10-03 10:10:56
    在C++语言中,这种多态性可以通过强制多态、重载多态、类型参数化多态、包含多态4种形式来实现。类型参数化多态和包含多态统称为一般多态性,用来系统地刻画语义上相关的一组类型。重载多态和强制多态统称为特殊多态...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,342
精华内容 1,736
关键字:

包含多态