设计一个能细分为矩形、三角形、圆形和椭圆形的图形类。使用继承将这些图形分类,找出能作为基类部分的共同特征(如宽、 高、中心点等)和方法(如初始化、求面积等)。
#include<iostream>
#include<cmath>
using namespace std;
// 基类:图形类
class Shape {
public:
virtual double getArea() = 0; // 纯虚函数,计算图形的面积
virtual void print() = 0; // 纯虚函数,打印图形的信息
};
//矩形类
class Rectangle : public Shape {
private:
double width;
double height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double getArea() override {
return width * height;
}
void print() override {
cout << "矩形,宽度为:" << width << ",高度为:" << height << endl;
}
};
//三角形类
class Triangle : public Shape {
private:
double base;
double height;
public:
Triangle(double b, double h) : base(b), height(h) {}
double getArea() override {
return 0.5 * base * height;
}
void print() override {
cout << "三角形,底边为:" << base << ",高度为:" << height << endl;
}
};
//圆形类
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() override {
return 3.14159 * pow(radius, 2);
}
void print() override {
cout << "圆形,半径为:" << radius << endl;
}
};
//椭圆类
class Ellipse : public Shape {
private:
double majorAxis;
double minorAxis;
public:
Ellipse(double major, double minor) : majorAxis(major), minorAxis(minor) {}
double getArea() override {
return 3.14159 * majorAxis * minorAxis;
}
void print() override {
cout << "椭圆形,长轴为:" << majorAxis << ",短轴为:" << minorAxis << endl;
}
};
int main() {
// 创建图形对象
Shape* shapes[] = { new Rectangle(3, 4), new Triangle(5, 6), new Circle(2.5), new Ellipse(3, 4) };
//调用
for (int i = 0; i < 4; i++) {
shapes[i]->print();
cout << "面积为:" << shapes[i]->getArea() << endl;
}
return 0;
}
运行结果: