一、前言
为了更深入的学习c++,小编将带领大家一起使用c++实现矩形,本文就介绍了一些相关的代码。
二、带分数的运算
Rectangle类,该类只保存长方形的4个顶点的坐标。构造函数调用set函数,接受4组坐标并验证它们均在第一象限中,并且构成长方形,成员函数计算长度,宽度,周长和面积,判断是否为正方形。
1.头文件(Rectangle.h)
/*
本程序考虑了不按照顺序输入,任意输入四个点判断的情况
本程序的方法:先判断ab是否平行于cd,再判断ab是否等于cd,最后判断ab是否垂直于cd
一个简单的算法是:使用中点到四个点距离相等来判断矩形;或者用勾股定理判断三个角是否为直角;
下面只给出使用第一种方法的情形
*/
#include<iostream>
using namespace std;
//长方形类
class Rectangle
{
private:
class Point
{
public:
double x;//x坐标
double y;//y坐标
};
Point a, b, c, d;//记录坐标
double length;//记录长度
double width;//记录宽度
public:
void Set();//构造函数
void Area();//计算面积
void Perimeter();//计算周长
void Get();//计算长度宽度
bool JudgeR();//判断是否为矩形
bool JudgeS();//判断是否为正方形
};
2.源文件(实现函数)
#include"Rectangle.h"
#include<iostream>
using namespace std;
//构造函数
void Rectangle::Set()
{
//输入坐标
cout << "第1个坐标的x值:"; cin >> a.x;
cout << "第1个坐标的y值:"; cin >> a.y;
cout << "第2个坐标的x值:"; cin >> b.x;
cout << "第2个坐标的y值:"; cin >> b.y;
cout << "第3个坐标的x值:"; cin >> c.x;
cout << "第3个坐标的y值:"; cin >> c.y;
cout << "第4个坐标的x值:"; cin >> d.x;
cout << "第4个坐标的y值:"; cin >> d.y;
//开始判断是否在第一象限内
if (a.x >= 0 && a.y>= 0 && b.x >= 0 && b.y >= 0 && c.x >= 0 && c.y >= 0 && d.x >= 0 && d.y >= 0)
{
cout << "已成功输入!" << endl;
}
else//产生异常,人为抛出异常信息
{
cout << "坐标的值并非在第一象限,无法设置!" << endl;
throw new out_of_range("坐标的值并非在第一象限,无法设置!");
}
//开始判断能否组成矩形
if (JudgeR())
{
cout << "输入坐标能组成矩形!" << endl;
if (JudgeS())
{
cout << "该矩形是正方形!" << endl;
Get();
}
else
{
cout << "该矩形是长方形!" << endl;
Get();
}
}
else
{
cout << "输入坐标不能组成矩形!" << endl;
throw new out_of_range("输入坐标不能组成矩形!");
}
}
//判断矩形函数
bool Rectangle::JudgeR()
{
//四个顶点先输入对点坐标时
if (a.x != b.x && a.y != b.y)
{
double ab_y = a.y - b.y;
double ab_x = a.x - b.x;
double cd_y = c.y - d.y;
double cd_x = c.x - d.x;
if (abs(ab_x) != abs(cd_x) || abs(ab_y) != abs(cd_y))
return false;
else
return true;
}
//四个顶点先左后右,先左后右输入
else if ((a.x == b.x || a.y == b.y) && (a.x == c.x || a.y == c.y))
{
double ab_y = a.y - b.y;
double ab_x = a.x - b.x;
double cd_y = c.y - d.y;
double cd_x = c.x - d.x;
//首先判断ab是否平行于cd
if (ab_x == 0 || cd_x == 0)
{
if (ab_x != cd_x)
return false;
else
{
if (ab_y / ab_x != cd_y / cd_x)
{
return false;
}
}
}
//再判断ab是否等于cd
if (ab_y * ab_y + ab_x * ab_x != cd_x * cd_x + cd_y * cd_y)
return false;
//然后判断ab是否垂直于ac
double ac_y = a.y - c.y;
double ac_x = a.x - c.x;
if (ab_x == 0)
{
if (ac_y != 0)
return false;
}
else if (ac_x == 0)
{
if (ab_y != 0)
return false;
}
else if ((ac_y / ac_x) * (ab_y / ab_x) != -1)
{
return false;
}
}
//四个顶点先左后右,先右后左输入
else if ((a.x == b.x || a.y == b.y) && (a.x != c.x || a.y != c.y))
{
double ab_y = a.y - b.y;
double ab_x = a.x - b.x;
double cd_y = d.y - c.y;
double cd_x = d.x - c.x;
//首先判断ab是否平行于cd
if (ab_x == 0 || cd_x == 0)
{
if (ab_x != cd_x)
return false;
else
{
if (ab_y / ab_x != cd_y / cd_x)
{
return false;
}
}
}
//再判断ab是否等于cd
if (ab_y * ab_y + ab_x * ab_x != cd_x * cd_x + cd_y * cd_y)
return false;
//然后判断ab是否垂直于ac
double ac_y = a.y - d.y;
double ac_x = a.x - d.x;
if (ab_x == 0)
{
if (ac_y != 0)
return false;
}
else if (ac_x == 0)
{
if (ab_y != 0)
return false;
}
else if ((ac_y / ac_x) * (ab_y / ab_x) != -1)
{
return false;
}
}
return true;
}
//判断正方形函数
bool Rectangle::JudgeS()
{
double ab_y = a.y - b.y;
double ab_x = a.x - b.x;
double cd_y = c.y - d.y;
double cd_x = c.x - d.x;
double ac_y = a.y - c.y;
double ac_x = a.x - c.x;
if (ab_y == 0)
{
if (ab_x != ac_y)
{
return false;
}
}
else if (ab_x == 0)
{
if (ab_y != ac_x)
{
return false;
}
}
else
{
if (ab_y != ab_x)
{
return false;
}
}
return true;
}
//计算长度,宽度
void Rectangle::Get()
{
double d1 = 0, d2 = 0;
if (a.x != b.x) {
d1 = abs(a.x - b.x);
if (a.y != b.y) {
d2 = abs(a.y - b.y);
}
else {
d2 = abs(a.y - c.y);
}
}
else {
if (a.y != b.y) {
d1 = abs(a.y - b.y);
d2 = abs(a.x - c.x);
}
}
if (d1 > d2)
{
length = d1;
width = d2;
cout << "长度为:" << length << endl << "宽度为:" << width << endl;
}
else if (d1 == d2)
{
length = d2;
width = length;
cout << "正方形的宽为:" << width << endl;
}
else if (d1 < d2)
{
length = d2;
width = d1;
cout << "长度为:" << length << endl << "宽度为:" << width << endl;
}
}
//计算面积
void Rectangle::Area()
{
if (JudgeS())
cout << "该正方形的面积是: " << (width * length) << endl;
else
cout << "该长方形的面积是: " << (width * length) << endl;
}
//计算周长
void Rectangle::Perimeter()
{
if (JudgeS())
cout << "该正方形的周长是: " << 2 * (width + length) << endl;
else
cout << "该长方形的周长是: " << 2 * (width + length) << endl;
}
3.源文件(测试函数)
#include"Rectangle.h"
#include<iostream>
using namespace std;
int main()
{
Rectangle rec;
rec.Set();//输入坐标
rec.Area();//计算面积
rec.Perimeter();//计算周长
return 0;
}
4.运行截图
三、总结
以上就是今天要讲的内容,本文仅仅简单介绍了矩形类的设计,代码仅供大家参考,希望大家有所收获,感谢!