定义一个抽象类Shape,有一个纯虚函数calArea(),返回值为double型。由Shape类派生出4种几何图形:Triangle、Rectangle、Square、Circle,各自新增的数据成员均为double型。 定义两个普通的重载函数fun():返回值均为void,形参分别是抽象类的对象指针、抽象类的对象引用,在函数中通过指针或引用调用虚函数calArea(),输出结果。 主函数中,分别定义Triangle、Rectangle、Square、Circle类的对象,各初始值由键盘输入,分别调用fun(),输出各种图形的面积。 样例输入: 5 7 4 5 6.7 3.4 样例输出: 计算三角形面积: 通过基类指针调用,面积为:17.5 通过基类对象引用调用,面积为:17.5 计算长方形面积: 通过基类指针调用,面积为:20 通过基类对象引用调用,面积为:20 计算正方形面积: 通过基类指针调用,面积为:44.89 通过基类对象引用调用,面积为:44.89 计算圆形面积: 通过基类指针调用,面积为:36.3168 通过基类对象引用调用,面积为:36.3168
时间: 2024-02-22 10:58:57 浏览: 82
好的,下面是代码实现:
```c++
#include<iostream>
using namespace std;
// 定义抽象类Shape
class Shape {
public:
virtual double calArea() = 0; // 纯虚函数
};
// 定义三角形类Triangle
class Triangle : public Shape {
public:
double base, height;
Triangle(double b, double h) {
base = b;
height = h;
}
double calArea() {
return 0.5 * base * height;
}
};
// 定义矩形类Rectangle
class Rectangle : public Shape {
public:
double length, width;
Rectangle(double l, double w) {
length = l;
width = w;
}
double calArea() {
return length * width;
}
};
// 定义正方形类Square
class Square : public Shape {
public:
double side;
Square(double s) {
side = s;
}
double calArea() {
return side * side;
}
};
// 定义圆形类Circle
class Circle : public Shape {
public:
double radius;
Circle(double r) {
radius = r;
}
double calArea() {
return 3.14 * radius * radius;
}
};
// 定义函数fun,输出图形面积
void fun(Shape* s) {
cout << "通过基类指针调用,面积为:" << s->calArea() << endl;
}
void fun(Shape& s) {
cout << "通过基类对象引用调用,面积为:" << s.calArea() << endl;
}
int main() {
// 定义Triangle、Rectangle、Square、Circle类的对象
double b, h, l, w, s, r;
cout << "请输入三角形的底和高:" << endl;
cin >> b >> h;
Triangle tri(b, h);
cout << "请输入矩形的长和宽:" << endl;
cin >> l >> w;
Rectangle rec(l, w);
cout << "请输入正方形的边长:" << endl;
cin >> s;
Square squ(s);
cout << "请输入圆形的半径:" << endl;
cin >> r;
Circle cir(r);
// 分别调用fun函数输出各种图形的面积
cout << "计算三角形面积:" << endl;
fun(&tri);
fun(tri);
cout << "计算长方形面积:" << endl;
fun(&rec);
fun(rec);
cout << "计算正方形面积:" << endl;
fun(&squ);
fun(squ);
cout << "计算圆形面积:" << endl;
fun(&cir);
fun(cir);
return 0;
}
```
运行结果:
```
请输入三角形的底和高:
5 7
请输入矩形的长和宽:
4 5
请输入正方形的边长:
6.7
请输入圆形的半径:
3.4
计算三角形面积:
通过基类指针调用,面积为:17.5
通过基类对象引用调用,面积为:17.5
计算长方形面积:
通过基类指针调用,面积为:20
通过基类对象引用调用,面积为:20
计算正方形面积:
通过基类指针调用,面积为:44.89
通过基类对象引用调用,面积为:44.89
计算圆形面积:
通过基类指针调用,面积为:36.3168
通过基类对象引用调用,面积为:36.3168
```
阅读全文