程序设计 (1)定义一个基类Shape,在ShowArea函数声明前冠以virtual使其成为虚函数,并且能够在派生类中重定义。 (2)定义三个派生类Circle、Rectangle、Triangle,并公有继承Shape基类。 (3)在主函数中分别调用三个派生类的ShowArea函数,求出各个形状的面积。 (4)定义一个基类指针数组p[3] ={&A,&B,&C},通过->访问派生类对象的成员函数ShowArea。
时间: 2023-12-10 17:37:22 浏览: 104
下面是程序的具体实现:
```cpp
#include <iostream>
using namespace std;
class Shape{
public:
virtual double ShowArea() = 0; //将ShowArea函数声明为纯虚函数,使Shape类成为抽象基类
};
class Circle : public Shape{
private:
double radius;
public:
Circle(double r) : radius(r){}
double ShowArea(){
return 3.1415926 * radius * radius;
}
};
class Rectangle : public Shape{
private:
double length;
double width;
public:
Rectangle(double l, double w) : length(l), width(w){}
double ShowArea(){
return length * width;
}
};
class Triangle : public Shape{
private:
double base;
double height;
public:
Triangle(double b, double h) : base(b), height(h){}
double ShowArea(){
return 0.5 * base * height;
}
};
int main(){
Circle A(2.5);
Rectangle B(3.0, 4.0);
Triangle C(5.0, 6.0);
cout << "圆的面积:" << A.ShowArea() << endl;
cout << "矩形的面积:" << B.ShowArea() << endl;
cout << "三角形的面积:" << C.ShowArea() << endl;
Shape* p[3]; //定义指向Shape类型的指针数组
p[0] = &A;
p[1] = &B;
p[2] = &C;
for(int i=0; i<3; i++){
cout << "第" << i+1 << "个图形的面积:" << p[i]->ShowArea() << endl; //通过指针访问成员函数
}
return 0;
}
```
程序的输出结果为:
```
圆的面积:19.6349
矩形的面积:12
三角形的面积:15
第1个图形的面积:19.6349
第2个图形的面积:12
第3个图形的面积:15
```
在这个程序中,我们定义了一个Shape类作为基类,其中包含了纯虚函数ShowArea,用于计算各种形状的面积。然后我们又定义了三个派生类,分别实现了圆、矩形和三角形的面积计算方法。在主函数中,我们先分别创建了一个圆、一个矩形和一个三角形对象,并调用它们的ShowArea函数来计算它们的面积。接着,我们又定义了一个指向Shape类型的指针数组,并将三个对象的地址依次存储到数组中。最后,我们通过指针访问各个对象的ShowArea函数,也就是动态地调用了派生类的重定义函数,计算出了各个图形的面积。
阅读全文