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

posted @ 2020-04-27 16:55  川尘  阅读(389)  评论(0编辑  收藏  举报
`