1.设计抽象基类Shape类 2.由Shape类派生出Circle圆类,Rectangle矩形类,Triangle三角形类 3.用函数printArea分别实现圆类、矩形类、三角形类的面积 4.用基类Shape类的指针输出圆类、矩形类、三角形类的面积
时间: 2024-03-10 12:47:43 浏览: 27
好的,您的问题是如何设计一个抽象基类Shape及其派生类Circle、Rectangle、Triangle,并实现printArea函数用于输出各自的面积,并用指针输出它们的面积。我来为您解答。
首先,我们可以设计抽象基类Shape如下:
```cpp
class Shape {
public:
virtual double getArea() const = 0;
virtual ~Shape() {}
};
```
其中,getArea是一个纯虚函数,没有实现,因此Shape是一个抽象类。其目的是让每个派生类都必须实现getArea函数,以计算该派生类的面积。
然后,我们可以设计Circle、Rectangle和Triangle类,分别继承自Shape类,如下:
```cpp
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
virtual double getArea() const override {
return 3.14159 * radius * radius;
}
private:
double radius;
};
class Rectangle : public Shape {
public:
Rectangle(double w, double h) : width(w), height(h) {}
virtual double getArea() const override {
return width * height;
}
private:
double width, height;
};
class Triangle : public Shape {
public:
Triangle(double w, double h) : width(w), height(h) {}
virtual double getArea() const override {
return 0.5 * width * height;
}
private:
double width, height;
};
```
其中,每个派生类都实现了getArea函数,分别用于计算对应形状的面积。
最后,我们可以编写printArea函数和输出指针的代码,如下:
```cpp
void printArea(const Shape& shape) {
cout << "The area is " << shape.getArea() << endl;
}
int main() {
Circle c(1.0);
Rectangle r(2.0, 3.0);
Triangle t(2.0, 3.0);
printArea(c);
printArea(r);
printArea(t);
Shape* pShape = &c;
printArea(*pShape);
pShape = &r;
printArea(*pShape);
pShape = &t;
printArea(*pShape);
return 0;
}
```
输出结果为:
```
The area is 3.14159
The area is 6
The area is 3
The area is 3.14159
The area is 6
The area is 3
```
其中,printArea函数接受一个Shape类型的引用,可以用于输出各个派生类的面积。同时,我们可以用Shape类型的指针指向各个派生类对象,然后通过*运算符解引用指针,调用getArea函数,输出面积。
阅读全文