zoukankan      html  css  js  c++  java
  • C++泛型程序设计和多态

    泛型程序设计

    当一个程序需要一个基类对象时,可以提供一个派生类的对象。我们称之为泛型程序设计。这种设计使得一个函数能适应更大的范围的对象实参,变得更加通用。

    用我们前面说到的例子来讲,假如有一个函数displayGeometricObject()可以传入GeometricObject类的对象:

    void displayGeometricObject(const GeometricObject& g) {
        //在控制台打印对象g的描述信息
        cout << g.toString() << endl;
    }

    我们声明三个对象:

    GeometricObject g;
    Circle c;
    Rectangle r;

    那么这个三个类都可以当做displayGeometricObject函数的参数传入:

    displayGeometricObject(g);
    displayGeometricObject(c);
    displayGeometricObject(r);

    其实这很容易理解:我说我想要一个几何图形,但是没有具体的说是什么图形。那么你可以给我一个圆,也可以给我一个矩形,但是你不能够给我一个苹果,因为它不是几何图形。而且你也不能给我一个几何图形,因为几何图形是抽象的,你没有办法拿出来。水果也是抽象的,你只能拿出苹果、香蕉、梨等具体的水果,但是没有办法直接拿出一个水果。

    我们运行上面的程序会发现最终的结果是:

    (GeometricObject类的toString方法返回字符串"Geometry Object")

    (Circle类的toString方法返回字符串"Circle Object")

    (Rectangle类的toString方法返回字符串"Rectangle Object")

    (前面打印了三句“我是一个几何图形”是因为GeometricObject类的构造函数中有"cout << "我是一个几何图形" << endl;"语句,每次子类或父类创建对象时候都要调用)

    最终显示出三行"Geometry Object",而不是我们预期的:

    Geometry Object
    Circle Object
    Rectangle Object

    这是因为它直接调用了GeometryObject类的toString函数。

    如果想要得到我们预期的结果,就涉及到了虚函数的概念,会在下一篇讲到(C++虚函数)。

    多态

    多态就是多种形态的意思。

    多态意味着一个父类型的变量可以引用一个子类型的变量。

    displayGeometricObject(const GeometricObject g)函数能够传入不同类型的参数就是多态的体现。

  • 相关阅读:
    SYSTEM32 下的几乎所有文件的简单说明
    Windows2000 下管理员账户真的不安全
    Windows2000 下管理员账户真的不安全
    SYSTEM32 下的几乎所有文件的简单说明
    看看你电脑里面有多少垃圾文件浪费内存
    巧妙利用三招保护局域网中的 IP 地址
    Sun推出OpenSolaris 为技术立异注入生机
    高质量C /C编程指南附录B :C /C试题和答案
    高质量C /C编程指南第8章 C 函数的初级特性
    俄罗斯邮政将迁徙到Linux 有关机构已入手入手测试Linux
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12781072.html
Copyright © 2011-2022 走看看