1.设计抽象基类Shape类 2.由Shape类派生出Circle圆类,Rectangle矩形类,Triangle三角形类 3.用函数printArea分别实现圆类、矩形类、三角形类的面积 4.用基类Shape类的指针输出圆类、矩形类、三角形类的面积
时间: 2024-03-07 15:50:05 浏览: 63
设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法
5星 · 资源好评率100%
好的,我明白了。这是一个关于面向对象编程的问题,需要你设计一个抽象基类Shape,然后派生出Circle、Rectangle和Triangle三个类,分别计算它们的面积并输出。最后,使用Shape类的指针输出它们的面积。下面是代码实现:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
virtual double getArea() = 0; // 纯虚函数
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
virtual double getArea() {
return 3.14 * radius * radius;
}
};
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
virtual double getArea() {
return width * height;
}
};
class Triangle : public Shape {
private:
double base, height;
public:
Triangle(double b, double h) : base(b), height(h) {}
virtual double getArea() {
return 0.5 * base * height;
}
};
void printArea(Shape& s) {
cout << "面积为:" << s.getArea() << endl;
}
int main() {
Circle c(5);
Rectangle r(3, 4);
Triangle t(6, 8);
printArea(c);
printArea(r);
printArea(t);
Shape* s1 = &c;
Shape* s2 = &r;
Shape* s3 = &t;
cout << "使用指针输出:" << endl;
cout << "圆的面积为:" << s1->getArea() << endl;
cout << "矩形的面积为:" << s2->getArea() << endl;
cout << "三角形的面积为:" << s3->getArea() << endl;
return 0;
}
```
输出结果为:
```
面积为:78.5
面积为:12
面积为:24
使用指针输出:
圆的面积为:78.5
矩形的面积为:12
三角形的面积为:24
```
注意,这里的Shape类是一个抽象基类,其中定义了一个纯虚函数getArea(),这是因为Shape类本身并不是一个具体的图形,无法计算面积,只有Circle、Rectangle和Triangle这些具体的图形才能计算面积。由于这三个类都是从Shape类派生而来的,因此它们必须实现getArea()方法,否则会编译错误。在printArea()函数中,使用了一个Shape类的引用,这样可以实现向上转型,即将子类对象赋值给父类引用,这样可以保证调用的是子类的getArea()方法。最后,使用Shape类的指针输出面积时,同样也实现了向上转型。
阅读全文