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)函数能够传入不同类型的参数就是多态的体现。

  • 相关阅读:
    对Java总体上的认识
    HTML+CSS学习情况
    读过的书籍
    FSCapture[个人认为最好的截图工具]
    会使用的软件
    深入理解Java中的引用的含义与原理
    从头开始学JavaScript (三)——数据类型
    从头开始学JavaScript (二)——变量及其作用域
    从头开始学JavaScript(一)——基础中的基础
    【Head First Javascript】学习笔记0——自己制作chm参考手册素材
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12781072.html
Copyright © 2011-2022 走看看