目录
一、题目描述
(基础题)编程实现:形状类族中的纯虚函数。要求如下:
(1)定义抽象类Shape,其包含纯虚函数area、perimeter;
(2)以Shape类为基类,由此派生出3个派生类:Circle(圆)、Rectangle(矩形)和Triangle(三角形)。并分别为它们增加各自的数据成员、用于计算面积的area成员函数、用于计算周长的Perimeter成员函数;
(3)在main函数中进行测试。
二、代码
/*
(1)定义抽象类Shape,其包含纯虚函数area、perimeter;
(2)以Shape类为基类,由此派生出3个派生类:Circle(圆)、Rectangle(矩形)和Triangle(三角形)。
并分别为它们增加各自的数据成员、用于计算面积的area成员函数、用于计算周长的Perimeter成员函数;
(3)在main函数中进行测试。
*/
#include<iostream>
#include<math.h>
using namespace std;
template <class T>
class Shape
{
public:
virtual T srea() = 0;
virtual T perimeter() = 0;
};
template <class T>
class Circle :public Shape<T>//圆类
{
private:
T r;
public:
Circle(T r)
{
this->r = r;
}
T srea() { return r * r * 3.14; }//面积
T perimeter() { return 2 * 3.14 * r; }//周长
};
template <class T>
class Rectangle :public Shape<T>//矩形类
{
public:
Rectangle(T w, T c)
{
wide = w;
col = c;
}
T srea() { return wide * col; }//面积
T perimeter() { return (wide + col) * 2; }//周长
private:
T wide;
T col;
};
template <class T>
class Triangle :public Shape<T> //三角形类
{
public:
Triangle(T a, T b,T c)
{
this->a = a;
this->b = b;
this->c = c;
}
T srea()
{
T p = (a + b + c) / 2;
T s = sqrt(p * (p - a) * (p - b) * (p - c));
return s;
}//面积
T perimeter() { return a + b + c; }//周长
private:
T a;
T b;
T c;
};
template <class T>
void show(Shape<T>* s)
{
cout << "该类型面积为:" << s->srea() << endl;
cout << "该类型周长为:" << s->perimeter() << endl;
cout << endl;
}
int main()
{
Circle<double> q1(5);
cout << "圆类:" << endl;
show(&q1);
Rectangle<int> q2(5, 10);
cout << "矩形类:" << endl;
show(&q2);
Triangle<float> q3(3, 4, 5);
cout << "三角形类:" << endl;
show(&q3);
return 0;
}
三、运行结果