编写C++程序,声明抽象基类 Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。
时间: 2023-08-31 13:19:58 浏览: 123
### 回答1:
以下是代码实现:
```cpp
#include <iostream>
using namespace std;
// 抽象基类 Shape
class Shape {
public:
virtual double getArea() = 0; // 纯虚函数,计算面积
};
// 派生类 Circle 圆形
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
double getArea() { return 3.14 * radius * radius; } // 计算圆形面积
private:
double radius; // 圆形半径
};
// 派生类 Rectangle 矩形
class Rectangle : public Shape {
public:
Rectangle(double w, double h) : width(w), height(h) {}
double getArea() { return width * height; } // 计算矩形面积
private:
double width; // 矩形宽度
double height; // 矩形高度
};
// 派生类 Triangle 三角形
class Triangle : public Shape {
public:
Triangle(double b, double h) : base(b), height(h) {}
double getArea() { return 0.5 * base * height; } // 计算三角形面积
private:
double base; // 三角形底边长
double height; // 三角形高度
};
// 输出图形面积的函数
void printArea(Shape* shape) {
cout << "该图形的面积为:" << shape->getArea() << endl;
}
int main() {
Circle circle(5.0); // 定义圆形对象,半径为5
Rectangle rect(4.0, 6.0); // 定义矩形对象,宽度为4,高度为6
Triangle triangle(3.0, 8.0); // 定义三角形对象,底边长为3,高度为8
printArea(&circle); // 输出圆形面积
printArea(&rect); // 输出矩形面积
printArea(&triangle); // 输出三角形面积
return 0;
}
```
输出结果:
```
该图形的面积为:78.5
该图形的面积为:24
该图形的面积为:12
```
### 回答2:
下面是一个示例的C程序,实现了抽象基类Shape和它的派生类Circle、Rectangle、Triangle,并在printArea函数中分别输出它们的面积。
```c
#include <stdio.h>
// 声明抽象基类 Shape
typedef struct {
double area;
} Shape;
// 声明派生类 Circle
typedef struct {
Shape base;
double radius;
} Circle;
// 声明派生类 Rectangle
typedef struct {
Shape base;
double width;
double height;
} Rectangle;
// 声明派生类 Triangle
typedef struct {
Shape base;
double base_length;
double height;
} Triangle;
// 输出图形的面积
void printArea(Shape* shape) {
printf("面积: %lf\n", shape->area);
}
int main() {
Circle circle;
Rectangle rectangle;
Triangle triangle;
// 给定圆的数据
circle.radius = 5.0;
circle.base.area = 3.14159 * circle.radius * circle.radius;
printArea((Shape*)&circle);
// 给定矩形的数据
rectangle.width = 5.0;
rectangle.height = 8.0;
rectangle.base.area = rectangle.width * rectangle.height;
printArea((Shape*)&rectangle);
// 给定三角形的数据
triangle.base_length = 6.0;
triangle.height = 4.0;
triangle.base.area = 0.5 * triangle.base_length * triangle.height;
printArea((Shape*)&triangle);
return 0;
}
```
在这个程序里,通过在抽象基类Shape中声明了一个成员变量area来表示图形的面积。派生类Circle、Rectangle和Triangle分别拥有自己特定的数据成员radius、width和height,通过给这些成员变量赋值来确定图形的数据。printArea函数接受一个指向Shape的指针,并通过该指针来访问各个派生类对象的面积。
阅读全文