C++语言程序设计

在这个例子中，从多边形基类CPolygon派生出了矩形类CRectangle和三角形类CTriangle。
CPolygon类中定义了两个保护成员width、height，分别表示多边形的宽和高。另外，定义了三个公有成员函数set_values、area、printarea。其中set_values用于设置数据成员的值；area用于计算多边形的面积，它是一个纯虚函数，没有实现，要在派生类实现；printarea用于打印多边形的面积。由于CPolygon类有一个纯虚函数area，所以，它是一个抽象类，不能用它定义对象，且它只能作为基类。
在两个派生类CRectangle和CTriangle中，仅仅重定义了area函数，以覆盖基类CPolygon的area函数。它们的数据成员、对数据成员的设置及对面积的输出的成员函数均从基类继承得到。
在main函数中，分别定义了一个一个CRectangle对象rect和一个CTriangle对象trgl，定义了两个CPolygon指针ppoly1和ppoly2，并让它们分别指向对象rect和trgl。语句：
ppoly1->set_values (4,5);
ppoly2->set_values (4,5);
是分别设置对象rect和trgl的数据成员，由于set_values是非虚函数，ppoly1和ppoly2都是CPolygon指针，所以，这是调用CRectangle的set_values函数。而语句：
ppoly1->printarea();
ppoly2->printarea();
则存在多态调用。同样，这是调用CRectangle的printarea 函数，但是，在printarea内调用area虚函数，而当前的this指针是分别指向对象rect和trgl，且这两个对象中分别覆盖了CPolygon类的area虚函数，所以，上面两个语句在printarea函数中，分别调用对象rect和trgl中的area虚函数。运行该程序，得到的运行结果如下：
20
10