设计一个图形类(Shape),由它派生出三角形类(Triangle)、正方形类(Square)、圆形类(Circle),利用虚函数计算图形面积,并在主函数中进行测试。
时间: 2023-11-22 08:57:03 浏览: 336
以下是代码实现:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
virtual double area() = 0; // 纯虚函数
};
class Triangle : public Shape {
public:
Triangle(double b, double h) : base(b), height(h) {}
virtual double area() {
return 0.5 * base * height;
}
private:
double base;
double height;
};
class Square : public Shape {
public:
Square(double l) : length(l) {}
virtual double area() {
return length * length;
}
private:
double length;
};
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
virtual double area() {
return 3.14 * radius * radius;
}
private:
double radius;
};
int main() {
Shape* shapePtr;
Triangle triangle(4, 5);
Square square(3);
Circle circle(2);
shapePtr = ▵
cout << "Triangle area: " << shapePtr->area() << endl;
shapePtr = □
cout << "Square area: " << shapePtr->area() << endl;
shapePtr = &circle;
cout << "Circle area: " << shapePtr->area() << endl;
return 0;
}
```
我们定义了一个抽象基类 `Shape`,并且在其中定义了一个纯虚函数 `area()`。纯虚函数是没有函数体的虚函数,必须在派生类中实现。因为 `Shape` 类是抽象基类,所以不能直接被实例化。
然后我们派生出三个类:`Triangle`、`Square` 和 `Circle`,它们都继承了 `Shape` 类。在每个类中,我们都实现了 `area()` 函数,并且使用了不同的计算公式。
在主函数中,我们定义了一个指向 `Shape` 类的指针 `shapePtr`,并且用它来指向派生类的对象。然后调用每个对象的 `area()` 函数,分别计算它们的面积,并输出到屏幕上。
输出结果如下:
```
Triangle area: 10
Square area: 9
Circle area: 12.56
```
阅读全文