由三角形正方形和圆形三种图形求它们各自的面积,能够从中抽象出一个基类,在基类中申明一个虚函数
时间: 2024-04-02 18:32:20 浏览: 19
可以从这三种图形中抽象出一个基类,命名为Shape,其中包含一个纯虚函数getArea(),用于计算图形的面积。然后,分别派生出三个类Triangle、Square和Circle,它们分别实现getArea()函数来计算自己的面积。在Triangle类中,getArea()函数计算三角形的面积;在Square类中,getArea()函数计算正方形的面积;在Circle类中,getArea()函数计算圆形的面积。这样,我们就可以通过调用不同的派生类的getArea()函数来计算不同图形的面积了。
相关问题
编写一个程序计算正方形圆形三角形图形面积要求抽象出一个基类shape,在其中说明一个纯虚函数用来求边长,利用派生类定义正方形、圆形,三角形,并求出这三种图形的面积,
好的,以下是实现代码:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
virtual double getLength() = 0; // 纯虚函数,求边长
virtual double getArea() = 0; // 纯虚函数,求面积
};
class Square : public Shape {
private:
double side; // 正方形的边长
public:
Square(double s) : side(s) {}
virtual double getLength() { return side; } // 重写求边长的纯虚函数
virtual double getArea() { return side * side; } // 重写求面积的纯虚函数
};
class Circle : public Shape {
private:
double radius; // 圆形的半径
public:
Circle(double r) : radius(r) {}
virtual double getLength() { return 2 * 3.14 * radius; } // 重写求边长的纯虚函数
virtual double getArea() { return 3.14 * radius * radius; } // 重写求面积的纯虚函数
};
class Triangle : public Shape {
private:
double side1, side2, side3; // 三角形的三边长
public:
Triangle(double s1, double s2, double s3) : side1(s1), side2(s2), side3(s3) {}
virtual double getLength() { return side1 + side2 + side3; } // 重写求边长的纯虚函数
virtual double getArea() {
double p = (side1 + side2 + side3) / 2; // 计算半周长
return sqrt(p * (p - side1) * (p - side2) * (p - side3)); // 使用海伦公式计算面积
} // 重写求面积的纯虚函数
};
int main() {
Shape* shapes[3]; // 使用指针数组存储不同的形状
shapes[0] = new Square(5); // 创建正方形对象
shapes[1] = new Circle(3); // 创建圆形对象
shapes[2] = new Triangle(3, 4, 5); // 创建三角形对象
for (int i = 0; i < 3; i++) {
cout << "Shape " << i+1 << " area: " << shapes[i]->getArea() << endl; // 调用不同对象的求面积函数
}
return 0;
}
```
代码中定义了一个基类 `Shape`,其中包含两个纯虚函数 `getLength()` 和 `getArea()`,分别用来求边长和面积。然后分别定义了三个派生类 `Square`、`Circle` 和 `Triangle`,分别表示正方形、圆形和三角形。这三个派生类都重写了基类中的纯虚函数,实现了各自的求边长和求面积的方法。最后在 `main()` 函数中创建了三个不同的对象,并通过指针数组存储了起来,然后遍历这个指针数组,调用不同对象的求面积函数,输出结果。
1.编写一个程序计算三角形、正方形和圆形的面积,要求抽象出一个基类base,在其中说明一个虚函数,用来求面积,并利用单接口,多实现版本设计各图形面积的方法。
以下是基于C++的实现:
```cpp
#include <iostream>
using namespace std;
class base { // 基类
public:
virtual float area() = 0; // 纯虚函数
};
class triangle : public base { // 三角形类
private:
float height;
float base;
public:
triangle(float h, float b) {
height = h;
base = b;
}
float area() { // 重写虚函数
return 0.5 * height * base;
}
};
class square : public base { // 正方形类
private:
float side;
public:
square(float s) {
side = s;
}
float area() { // 重写虚函数
return side * side;
}
};
class circle : public base { // 圆形类
private:
float radius;
public:
circle(float r) {
radius = r;
}
float area() { // 重写虚函数
return 3.14159 * radius * radius;
}
};
int main() {
base *shapes[3]; // 定义基类指针数组
shapes[0] = new triangle(5, 10); // 存储三角形对象
shapes[1] = new square(6); // 存储正方形对象
shapes[2] = new circle(4); // 存储圆形对象
for (int i = 0; i < 3; i++) {
cout << "Shape " << i+1 << " area: " << shapes[i]->area() << endl; // 调用虚函数计算面积
}
return 0;
}
```
上述程序中,定义了一个基类`base`,其中包含一个纯虚函数`area()`,该函数用于计算形状的面积。然后分别定义了三个派生类`triangle`、`square`和`circle`,并重写了虚函数`area()`,分别计算三角形、正方形和圆形的面积。
在`main()`函数中,定义了一个基类指针数组`shapes`,并存储三个形状对象。然后通过循环调用虚函数`area()`计算每个形状的面积并输出。
相关推荐
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)