由三角形正方形和圆形三种图形求它们各自的面积,能够从中抽象出一个基类,在基类中申明一个虚函数
时间: 2024-04-02 07:32:20 浏览: 138
可以从这三种图形中抽象出一个基类,命名为Shape,其中包含一个纯虚函数getArea(),用于计算图形的面积。然后,分别派生出三个类Triangle、Square和Circle,它们分别实现getArea()函数来计算自己的面积。在Triangle类中,getArea()函数计算三角形的面积;在Square类中,getArea()函数计算正方形的面积;在Circle类中,getArea()函数计算圆形的面积。这样,我们就可以通过调用不同的派生类的getArea()函数来计算不同图形的面积了。
相关问题
编辑一个程序计算三角形正方形圆形三种图形的面积,要求抽象出一个基类base,在其中说明一个虚函数用来求面积,利用派生类定义三角形正方形圆形,编写主函数并测试
在面向对象编程中,我们可以创建一个基类`BaseShape`来表示所有形状的共同属性,如名称和面积计算方法。然后,我们可以为具体的形状如三角形、正方形和圆形分别定义派生类,并重写基类中的虚函数来计算各自的面积。
首先,我们定义`BaseShape`基类:
```cpp
class BaseShape {
public:
// 虚函数,用于计算面积
virtual double getArea() const = 0;
// 公共名称方法
virtual std::string getName() const { return "BaseShape"; }
};
```
接着,我们为每个具体形状创建派生类:
```cpp
class Triangle : public BaseShape {
private:
double base, height;
public:
Triangle(double b, double h) : base(b), height(h) {}
double getArea() const override {
return 0.5 * base * height;
}
std::string getName() const override { return "Triangle"; }
};
class Square : public BaseShape {
private:
double side;
public:
Square(double s) : side(s) {}
double getArea() const override {
return side * side;
}
std::string getName() const override { return "Square"; }
};
class Circle : public BaseShape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() const override {
return M_PI * radius * radius;
}
std::string getName() const override { return "Circle"; }
};
```
最后,在主函数`main()`中,我们可以创建这些形状的对象并测试它们的面积计算:
```cpp
int main() {
Triangle triangle(4, 6);
Square square(5);
Circle circle(3);
std::cout << "Triangle area: " << triangle.getArea() << std::endl;
std::cout << "Square area: " << square.getArea() << std::endl;
std::cout << "Circle area: " << circle.getArea() << std::endl;
return 0;
}
```
运行这个程序会输出每个形状的具体面积。这就是如何通过基类和派生类实现计算三角形、正方形和圆形面积的功能,并演示了虚函数的使用。
编写一个程序计算正方形圆形三角形图形面积要求抽象出一个基类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()` 函数中创建了三个不同的对象,并通过指针数组存储了起来,然后遍历这个指针数组,调用不同对象的求面积函数,输出结果。
阅读全文