1.设计抽象基类Shape类 2.由Shape类派生出Circle圆类, Rectangle矩形类, Triangle三角形 3.用函数printArea分别实现圆类、矩形类、三角形类的面积4.用基类Shape类的指针输出圆类、矩形类、三角形类的面积
时间: 2024-03-24 15:35:58 浏览: 62
好的,我已经了解你的问题。下面是我的回答:
首先,我们需要定义一个抽象基类Shape类,它包含一个纯虚函数getArea(),用于计算形状的面积。代码如下:
```c++
class Shape {
public:
virtual ~Shape() {}
virtual double getArea() const = 0;
};
```
然后,我们可以从Shape类派生出Circle圆类、Rectangle矩形类和Triangle三角形类,它们都实现了getArea()函数。例如,Circle类的定义如下:
```c++
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
double getArea() const override {
return 3.14159 * radius * radius;
}
private:
double radius;
};
```
Rectangle和Triangle类的定义类似,这里不再赘述。
接下来,我们需要一个printArea函数,它能够打印出形状的面积。我们可以为每个类都实现一个printArea函数,例如Circle类的定义如下:
```c++
void printArea(const Circle& c) {
std::cout << "Area of circle: " << c.getArea() << std::endl;
}
```
Rectangle和Triangle类的printArea函数定义类似,这里不再赘述。
最后,我们可以用Shape类的指针输出所有形状的面积。例如,我们可以定义一个函数printShapeArea,它接受一个Shape类的指针作为参数,然后调用这个指针的getArea函数并打印出结果。代码如下:
```c++
void printShapeArea(const Shape* shape) {
std::cout << "Area of shape: " << shape->getArea() << std::endl;
}
```
现在,我们可以使用这些函数来计算和打印出各种形状的面积了。例如,我们可以这样调用它们:
```c++
Circle c(5);
printArea(c);
printShapeArea(&c);
Rectangle r(3, 4);
printArea(r);
printShapeArea(&r);
Triangle t(3, 4, 5);
printArea(t);
printShapeArea(&t);
```
这样就可以输出圆、矩形和三角形的面积了。请注意,我们可以使用Shape类的指针来调用printShapeArea函数,这意味着我们可以用同样的代码处理不同类型的对象,这是多态的一个例子。
阅读全文