zoukankan      html  css  js  c++  java
  • 对C++多态的一点理解

        作为一个C++新手,我浅谈一下我对多态的一点理解。

        首先,引用几句话:

        1、继承是一种抽象,它允许程序员在某些时候忽略相似对象的差异,又在其他时候利用这些差异。——《C++沉思录》

        2、继承就是为多态服务的。

        3、C++中只有通过指针调用虚函数的时候,才能实现多态。

        4、是父类的指针指向子类,而不是反过来。

      5、多态有助于实现拓展性和替换性。

        接下来看一个例子:

     

    假设,父类J最有一个函数(虚函数),名字叫做virtual void Open(“开机”);

    子类,D,K,F,X继承了父类J,都拥有了open这个方法,并分别重写这个方法,如下:

    电视机:void open(){"开始播放节目"}

    风扇:void open(){"开始扇风"}

    空调:void open(){"开始制冷"}

    洗衣机:void open(){"开始洗衣服"}

    实现多态的程序:

    J* j = NULL; //声明父类的指针

    D d;     //子类创建对象 

    F f;      //子类创建对象

    K k;     //子类创建对象

    X x;     //子类创建对象 

    j = &d;        //父类的指针指向子类

    //通过父类的指针调用子类对象的函数,也可写成 (*j).open(); 

    j ->open(); //调用的是 :{"开始播放节目"}

    j = &f;        //父类的指针指向子类

    j ->open(); //调用的是 :{"开始扇风"}

    j = &k;        //父类的指针指向子类

    j ->open(); //调用的是 :{"开始制冷"}

    j = &x;        //父类的指针指向子类

    j ->open(); //调用的是 :{"开始洗衣服"}

    从上面的程序看,同样是j ->open();这么一句话,调用的却是不同的函数,这就是对多态的直观认识!

    父类通过其指针指向子类,父类就能调用子类的函数(该函数,是子类继承父类的虚函数而来)。

            可能,读者会说,这多态也没有什么优势啊,我用分别子类不是一样可以调用这些函数吗?

            那么请读者再,回味一下“多态有助于实现拓展性和替换性。”这句话。

            还有“继承是一种抽象,它允许程序员在某些时候忽略相似对象的差异,又在其他时候利用这些差异。”

      这句话。

            希望您看后也有所感悟!

    作者:宋桓公
    出处:http://www.cnblogs.com/douzi2/
    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Win10 WSL Ubuntu18.04 编译安装MySQL5.7
    PHP7 深入理解
    php session 测试
    nginx 匹配路由分发php和golang
    composer 库无法提交git
    Win10 1803安装Ubuntu1804子系统
    dhtmlxTreeGrid使用
    win7 64位系统下安装PL/SQL连接Oracle服务器的解决方法
    转载--eclipse快捷键
    JUnit4学习笔记2-Eclipse中使用JUint4进行单元测试
  • 原文地址:https://www.cnblogs.com/douzi2/p/3278064.html
Copyright © 2011-2022 走看看