C++ 类与对象的习题练习
题目:
定义一个 Point 类表示平面上的一个点,在定义一个 Rectangle 表示平面上的矩形,用 Point 类的对象作为Rectangle成员描述平面上矩形的顶点坐标。要求类 Point中有相应的成员函数可以读取点的坐标值,类 Rectangle含有一个函数用于计算并输出矩形的顶点坐标及面积。在主函数中对类 Rectangle进行测试。
#include<iostream> using namespace std; #include <cstring> #include <math.h> # define MAX(a,b,c) a>b?(a>c?a:c):(b>c?b:c) //宏定义 利用三目运算符求出三个数中的最大值 # define MIN(a,b,c) a<b?(a<c?a:c):(b<c?b:c) //宏定义 利用三目运算符求出三个数中的最小值 class Point { double xCoord; double yCoord; public: Point() :xCoord(0), yCoord(0) {}//利用无参数构建函数初始化 xCoord 和 yCoord Point(double, double); double getxCoord(); double getyCoord(); }; Point::Point(double x, double y) //利用带参数构建函数初始化 xCoord 和 yCoord { xCoord = x; yCoord = y; } double Point::getxCoord() { return xCoord; } double Point::getyCoord() { return yCoord; } class Rectangle { double length; double width; public: Rectangle():length(0),width(0) {} //利用构建函数初始化 length 和 width void getCoord(Point u[]); double area(double,double);//取矩形的长和宽,调用 area()计算面积 }; void Rectangle::getCoord(Point p[]) //取类Point的数组 p[4],调用函数 getCoord()输出四个点的坐标 { for (int i = 0; i < 4; i++) { cout << "第" << i + 1 << "个点的坐标是(" << p[i].getxCoord() << "," << p[i].getyCoord() << ")" << endl; } } double Rectangle::area(double a,double b) //计算面积 { length = a; width = b; return (length * width); } int main() { double m = 0, n = 0,a = 0,b = 0, c = 0; Point p[4]; //调用无参数构造函数初始化数组 for (int i = 0; i < 4; i++) { cout << "请输入第" << i + 1 << "个点的x轴坐标" << endl; cin >> m; cout << "请输入第" << i + 1 << "个点的y轴坐标" << endl; cin >> n; p[i] = Point(m,n) ; //调用带参数构造函数对数组赋值 } Rectangle r; r.getCoord(p); //有题目可以得到图形是矩形,所以任取三个点必为矩形的长、宽、内线。 (最长的是内线,最短的是宽,中间值为长) a = sqrt(pow(p[0].getxCoord() - p[1].getxCoord(), 2) + pow(p[0].getyCoord() - p[1].getyCoord(), 2));// 两点距离公式 : AB=√((x1-x2)^2+(y1-y2)^2) b = sqrt(pow(p[1].getxCoord() - p[2].getxCoord(), 2) + pow(p[1].getyCoord() - p[2].getyCoord(), 2)); c= sqrt(pow(p[0].getxCoord() - p[2].getxCoord(), 2) + pow(p[0].getyCoord() - p[2].getyCoord(), 2)); double j = 0, k = 0,l=0; j = MAX(a, b, c);//内线 k = MIN(a, b, c);//宽 l = a + b + c - j - k;// 长 因为不会三目运算符计算中间值难度大,就选择了比较原始的方式计算长度 cout << r.area(l, k) << endl; return 0; }
这是本人编写的代码,由于是个小白,水平有限并不能优化其中所有的代码,因此代码中有许多地方很是累赘。欢迎大佬们前来指教吐槽。
PS:即使代码敲得烂到爆,也请大大佬们键盘留情,不喜勿喷。