#include <iostream>
using namespace std;
const double PI = 3.1415926;
class Shape{
public:
virtual double getArea() { return 0.0; }
virtual double getGirth() { return 0.0; }
virtual void getName() = 0;
virtual ~Shape()= default;
};
class Circle : public Shape {
public:
explicit Circle(double rad = 0.0) : radius(rad) {}
double getRadius() {
return radius;
}
public:
double getArea() override {
return PI * radius * radius;
}
double getGirth() override {
return 2 * PI * radius;
}
void getName() override {
cout << "Circle:\n";
cout << "Area = " << getArea() << endl;
cout << "Circum = " << getGirth() << endl;
}
private:
double radius;
};
class Rectangle : public Shape {
public:
explicit Rectangle(double len = 0, double wid = 0) : length(len), width(wid) {}
double getLength() {
return length;
}
double getWidth() {
return width;
}
public:
double getArea() override {
return length * width;
}
double getGirth() override {
return 2 * (length + width);
}
void getName() override {
cout << "Rect:\n";
cout << "Area = " << getArea() << endl;
cout << "Circum = " << getGirth() << endl;
}
private:
double length;
double width;
};
int main() {
Shape *c1 = new Circle(35);
c1->getName();
Shape *c2 = new Circle(38);
c2->getName();
double sc1 = (c2->getArea() - c1->getArea()) * 20;
double sc2 = c2->getGirth() * 35;
cout << "游泳池过道造价为:\n" << sc1 << "\n游泳池栅栏造价为:\n" << sc2 << endl;
Shape *r1 = new Rectangle(23.77, 10.97);
Shape *r2 = new Rectangle(36.57, 18.27);
r1->getName();
r2->getName();
double sr1 = (r2->getArea() - r1->getArea()) * 115;
double sr2 = r2->getGirth() * 792;
cout << "网球场过道造价为:\n" << sr1 << "\n网球场栅栏造价为:\n" << sr2 << endl;
return 0;
}
基类Shape,派生Circle类与Rectangle类
最新推荐文章于 2023-05-03 14:00:42 发布