问题:
//编写一个程序,声明抽象基类Shape,由它派生出3个派生类:
//Circle(圆形)、Rectangle(矩形)、Triangle(三角形),
//用一个函数printArea分别输出以上三者的面积(结果保留两位小数),3个图形的数据在定义对象时给定。
程序:
#include <iostream>
#include <iomanip>
#define pi 3.1415926
using namespace std;
class Shape
{
public:
virtual void area() =0;
};
class Circle :public Shape //(圆形)
{
public:
Circle(double r):radius(r){}
void area()
{
cout<<(pi*radius*radius)<<endl;
}
private:
double radius;
};
class Rectangle :public Shape//(矩形)
{
public:
Rectangle(double l,double w):length(l),width(w){}
void area()
{
cout<<(length*width)<<endl;
}
private:
double length,width;
};
class Triangle :public Shape//(三角形)
{
public:
Triangle(double l,double h):length(l),hight(h){}
void area()
{
cout<<(length*hight/2)<<endl;
}
private:
double length,hight;
};
//***
void printArea(Circle s)
{
s.area();
}
void printArea(Rectangle s)
{
s.area();
}
void printArea(Triangle s)
{
s.area();
}
//*********
int main()
{
float r,a,b,w,h;
cout<<fixed<<setprecision(2);
cin>>r;
Circle circle(r);
cout<<"area of circle = ";
printArea(circle);
cin>>a>>b;
Rectangle rectangle(a,b);
cout<<"area of rectangle = ";
printArea(rectangle);
cin>>w>>h;
Triangle triangle(w,h);
cout<<"area of triangle = ";
printArea(triangle);
return 0;
}
结果:
体会:printArea()这个函数,我以为有什么技巧,可以将不同派生类的对象直接作为实参,从而就不用写三个了,问了张玉老师,他一开始写了Shape类型做参数,但是不可行,只是对于虚函数有用,对抽象类没用。望找到这种方法