C++语言程序设计

下面，我们举一个完整的例子：

| 例11-22

#include <iostream.h>
class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b; }
virtual int area (void) =0;
};

class CRectangle: public CPolygon
{
public:
int area (void)
{ return (width * height); }
};

class CTriangle: public CPolygon
{
public:
int area (void)
{ return (width * height / 2); }
};

int main ()
{
CRectangle rect;
CTriangle trgl;
CPolygon * ppoly1 = &rect;
CPolygon * ppoly2 = &trgl;
ppoly1->set_values (4,5);
ppoly2->set_values (4,5);
cout << ppoly1->area() << endl;
cout << ppoly2->area() << endl;
return 0;
}

本程序计算本输出矩形和三角形的面积，运行结果为：
20
10
上面的代码中，我们用基类CPolygon指针指向派生类CRectangle和CTriangle对象，调用派生类的area成员函数，而在main函数中输出area函数的计算结果。我们也可以在CPolygon类中定义一个成员函数，用于打印计算结果，而不管是哪一个派生类的area函数的计算结果。CPolygon类修改如下：
class CPolygon
{
…
public:
…;
void printarea (void)
{ cout << this->area() <<endl; }
};
并把main函数作如下修改：
int main ()
{
…
ppoly1->printarea();
ppoly2->printarea();
return 0;
}