声明抽象基类Shape,由它派生出3个派生类:Circle,Rectangle,Triangle,用一个printArea函数分别输出以上三者的面积,3个图形的数据在定义对象时给定。 #include<iostream> using namespace std; class Shape { public: virtual double area()=0; virtual void shapename()=0; }; class Circle:public Shape { public: Circle(double r=1):radius(r){} virtual void shapename(){cout<<"Circle_area=";} virtual double area(){return 3.14159*radius*radius;} friend ostream&operator <<(ostream&,Circle&); protected: double radius; }; ostream&operator <<(ostream&output,Circle&c) { output<<c.area()<<endl; return output; } class Rectangle:public Shape { public: Rectangle(double a=1,double b=1):length(a),width(b){} virtual void shapename(){cout<<"Rectangle_area=";} virtual double area(){return length*width;} friend ostream&operator <<(ostream&,Rectangle&); protected: double length,width; }; ostream&operator <<(ostream&output,Rectangle&re) { output<<re.area()<<endl; return output; } class triangle:public Shape { public: triangle(double a=1,double b=1):base(a),height(b){} virtual void shapename(){cout<<"triangle_area=";} virtual double area(){return 0.5*base*height;} friend ostream&operator <<(ostream&,triangle&); protected: double base,height; }; ostream&operator <<(ostream&output,triangle&tr) { output<<tr.area()<<endl; return output; } void printArea(Shape **p,Circle a,Rectangle b, triangle c) { p[0]=&a; p[1]=&b; p[2]=&c; for(int i=0;i<3 i="" p="" i="" -="">shapename(); cout<<p i="" -="">area()<<endl; } } int main() { Shape *p[3]; Circle c(10); Rectangle r(5,10); triangle t(3,4); printArea(p,c,r,t); return 0; } </p></3></iostream>