1.设计抽象基类Shape类 2.由Shape 类派生出Circle圆类, Rectangle 矩形类, Triangle 三角形类 3.用函数printArea分别实现圆类、矩形类、三角形类的面积 4.用基类Shape类的指针输出圆类、矩形类、三角形类的面积
时间: 2024-03-24 10:38:51 浏览: 20
好的,以下是一份可能的C++代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Shape {
public:
virtual double area() = 0; // 纯虚函数,计算面积
virtual double perimeter() = 0; // 纯虚函数,计算周长
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r): radius(r) {}
double area() { return M_PI * radius * radius; }
double perimeter() { return 2 * M_PI * radius; }
};
class Rectangle : public Shape {
private:
double length, width;
public:
Rectangle(double l, double w): length(l), width(w) {}
double area() { return length * width; }
double perimeter() { return 2 * (length + width); }
};
class Triangle : public Shape {
private:
double a, b, c;
public:
Triangle(double s1, double s2, double s3): a(s1), b(s2), c(s3) {}
double area() {
double p = (a + b + c) / 2;
return sqrt(p * (p-a) * (p-b) * (p-c));
}
double perimeter() { return a + b + c; }
};
void printArea(Circle c) {
cout << "圆的面积: " << c.area() << endl;
}
void printArea(Rectangle r) {
cout << "矩形的面积: " << r.area() << endl;
}
void printArea(Triangle t) {
cout << "三角形的面积: " << t.area() << endl;
}
int main() {
Circle c(5);
Rectangle r(3, 4);
Triangle t(3, 4, 5);
printArea(c);
printArea(r);
printArea(t);
Shape *s1 = &c;
Shape *s2 = &r;
Shape *s3 = &t;
cout << "圆的面积: " << s1->area() << endl;
cout << "矩形的面积: " << s2->area() << endl;
cout << "三角形的面积: " << s3->area() << endl;
return 0;
}
```
在上面的代码中,我们首先定义了抽象基类Shape类,然后分别定义了圆类Circle、矩形类Rectangle和三角形类Triangle,它们都继承自Shape类,并且实现了Shape类中的纯虚函数area和perimeter。
接着,我们定义了三个函数printArea,分别用于输出圆类、矩形类和三角形类的面积。
最后,我们在主函数中分别创建了圆类、矩形类和三角形类的对象,并调用了printArea函数。然后,我们用Shape类的指针分别指向了圆类、矩形类和三角形类的对象,并输出了它们的面积。
注意,在函数printArea中,我们使用了对象的值传递方式,而不是引用或指针,这是因为这些类都比较简单,不需要考虑对象拷贝的效率问题。如果需要处理更复杂的类对象,最好使用引用或指针传递,避免不必要的拷贝。