【问题描述】定义一个圆形类,属性有半径和相应的成员函数。然后定义一个正方形类,属性有边长和相应的成员函数。再编写一个如下图所示的组合类,由一个正方型和一个圆形组成,要求该组合类能求出阴影部分面积和周长。
【输入形式】无
【输出形式】
自定义图形的面积49.2656
自定义图形的周长29.1328
自定义图形的面积109.098
自定义图形的周长45.6992
【样例输入】
【样例输出】
【样例说明】
【评分标准】
完整代码如下:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<istream>
#include<iomanip>
#include<ostream>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<fstream>
#include<stack>
#include<ctime>
#include<deque>
#include<queue>
#include <sstream>
#include <numeric>
#pragma warning (disable:4996)
using namespace std;
const double PI = 3.1416;
class Box {
double side_length;
public:
Box(double side_length = 1) : side_length(side_length) {}
double get_side_length() const { return side_length; }
void set(double side_length) { this->side_length = side_length; }
};
class circle {
double radius;
public:
circle(double radius = 1) : radius(radius) {}
double get_radius() const { return radius; }
void set(double radius) { this->radius = radius; }
};
class NewStyle {
circle c;
Box b;
public:
NewStyle(const circle& c, const Box& b) : c(c), b(b) {}
double S() {
double shadow_area = c.get_radius() * c.get_radius() * PI - b.get_side_length() * b.get_side_length();
return shadow_area;
}
double L() {
double shadow_perimeter = 2 * PI * c.get_radius() + 4 * b.get_side_length();
return shadow_perimeter;
}
void set(const circle& c, const Box& b) {
this->c = c;
this->b = b;
}
};
int main() {
circle A(4); //圆的半径为4
Box B(1); //正方形的边长为1
NewStyle C(A, B);
cout << "自定义图形的面积" << C.S() << endl;
cout << "自定义图形的周长" << C.L() << endl;
A.set(6); //圆的半径变为6
B.set(2); //正方形的边长变为2
C.set(A, B);
cout << "自定义图形的面积" << C.S() << endl;
cout << "自定义图形的周长" << C.L() << endl;
return 0;
}