矩形类

  • 一、前言
  • 二、带分数的运算
    • 1.头文件(Rectangle.h)
    • 2.源文件(实现函数)
    • 3.源文件(测试函数)
    • 4.运行截图
  • 三、总结

一、前言

为了更深入的学习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;elsereturn 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是否平行于cdif (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是否等于cdif (ab_y * ab_y + ab_x * ab_x != cd_x * cd_x + cd_y * cd_y)return false;//然后判断ab是否垂直于acdouble 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是否平行于cdif (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是否等于cdif (ab_y * ab_y + ab_x * ab_x != cd_x * cd_x + cd_y * cd_y)return false;//然后判断ab是否垂直于acdouble 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;elsecout << "该长方形的面积是:   " << (width * length) << endl;
}
//计算周长
void Rectangle::Perimeter()
{if (JudgeS())cout << "该正方形的周长是:   " << 2 * (width + length) << endl;elsecout << "该长方形的周长是:   " << 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.运行截图

三、总结

以上就是今天要讲的内容,本文仅仅简单介绍了矩形类的设计,代码仅供大家参考,希望大家有所收获,感谢!

使用c++设计矩形类相关推荐

  1. java椭圆形窗体_JAVA编程练习设计矩形类Ractangle、椭圆形类Ellipse,该两类实现平面图形接口PlaneGraphics....

    共回答了29个问题采纳率:96.6% 接口PlaneGraphics:public interface PlaneGraphics { public double area(); public dou ...

  2. java shape 空间操作类_设计三个类:几何形状类(Shape)、圆类(Circle)、矩形类(.,请编写 Java程序,设计一个“形状rdquo...

    问题标题 设计三个类:几何形状类(Shape).圆类(Circle).矩形类(.,请编写 Java程序,设计一个"形状&rdquo 2019-5-10来自ip:17.175.174. ...

  3. C++编程练习:多态实验——设计一个基类Shapes,Shapes类公有派生产生矩形类Rectangle和圆类Circle

    例.设计一个基类Shapes,包含成员函数display()并声明为纯虚函数.Shapes类公有派生产生矩形类Rectangle和圆类Circle,分别定义display()函数实现其主要几何元素的显 ...

  4. Python面向对象基础练习——设计一个名为 MyRectangle 的矩形类来表示矩形

    # 设计一个名为 MyRectangle 的矩形类来表示矩形.这个类包含 # (1) 左上角顶点的坐标:x,y # (2) 宽度和高度:width.height # (3) 构造方法:传入 x,y,w ...

  5. 设计一个名为 MyRectangle 的矩形类来表示矩形

    设计一个名为 MyRectangle 的矩形类来表示矩形.这个类包含 (1) 左上角顶点的坐标:x,y (2) 宽度和高度:width.height (3) 构造方法:传入 x,y,width,hei ...

  6. 【Java程序设计】GUI程序设计(设计封装矩形类、利用监听事件对textField进行读取和输入)

    题目要求 设计如下 思路 整体布局采用GridLayout的方式,将界面分为3行,一列(GridLayout(3,1)),顶部布局采用GridLayout(2,2)的方式,包含JLabel标签作为提示 ...

  7. C++设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,根据坐标能计算矩形的面积。

    C++设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,根据坐标能计算矩形的面积. 注:该题是今日做题时所遇. 要求: [输入形式] 程序参考的输入(提示&quo ...

  8. 设计一个名为Rectangle的矩形类,这个类包括:两个名为width和height的double数据域。

    设计一个名为Rectangle的矩形类,这个类包括:两个名为width和height的double数据域,它们分别表示矩形的宽和高.width和height的默认值都为1.该类包括矩形类的无参构造函数 ...

  9. 机器人技术第三次作业:用面向对象的思维设计相关类,从而实现直线与直线、直线与圆、直线与矩形的交点。

    用面向对象的思维设计相关类,从而实现直线与直线.直线与圆.直线与矩形的交点. 基本思想: 直线与直线,直线与圆:利用公式直接求解 直线与矩形:分解成直线与直线的交点: #include <ios ...

最新文章

  1. Vivado使用误区与进阶——如何读懂用好 Timing Report
  2. 您的手机上未安装应用程序 android 点击快捷方式提示未安装程序的解决
  3. 乐山市2021年高考成绩查询,四川乐山2021年普通高考报名人数 实际高考参考人数...
  4. b+树时间复杂度_阿里面试,问了B+树,这个回答让我通过了
  5. leetcode 25. Reverse Nodes in k-Group | 25. K 个一组翻转链表(Java)
  6. Oracle中的wmsys.wm_concat
  7. 成为Java流大师–第3部分:终端操作
  8. 零基础自学编程应读书籍
  9. Hive thrift服务--beeline使用
  10. 谷歌大脑联手Hinton提出SimCLR新框架,疯狂提升自监督学习性能
  11. centos7 安装 mysql8 强制修改密码
  12. 登陆csdn卡死机,进入不了csdn内容管理页面终极解决方案
  13. community_louvain社群划分方法
  14. mqtt测试工具(持续更新...)
  15. 阿里 OSS图片上传 —— 原生JS中使用
  16. Android 开发,你遇上 Emoji 头疼吗?
  17. android相机代码权限,Android – 相机权限被拒绝而没有提示
  18. Deconstructing laws of accessibility and facility distribution in cities
  19. python中计算排列组合的函数_Python实现的排列组合计算操作示例
  20. hive-创建数据库-创建表--hive版本3.1.2

热门文章

  1. 一位Python老程序员,给Python初学者的建议,希望你们少走弯路!
  2. 电量百分百亮绿灯,其余充电电量均为红灯。电量低于15闪红灯三秒一次。搜网灯没网时候绿灯快闪,有网了做呼吸灯五秒一次,呼吸灯可广播控制打开关闭。判断是否连上网。
  3. jquery的ajax的success和fail用法
  4. App安全登录之密码、通讯加密方法(MD5,Base64,RSA,AES)
  5. java判断素数1037_ACM离线题库超级全
  6. 智能车轮胎增大摩擦力
  7. 数据库语句常见方法:(随机生成Id,结合CSAE...WHEN的使用,分组拼接字段数据
  8. ls -l 列表详解
  9. 计算机考试哪个是考试文件夹,计算机考试中考生文件夹下的子文件夹在哪个磁盘中找??...
  10. 商品图片外链转内链php,wordpress外链转内链代码(支持跳转页、nofollow、加密原链接)...