快捷搜索: 王者荣耀 脱发

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:即使代码敲得烂到爆,也请大大佬们键盘留情,不喜勿喷。

经验分享 程序员 微信小程序 职场和发展