【C++语言实现】【本科实验系列】编写程序在CirCle类中实现关系运算符(大于,小于,等于),实现按半径对Circle对象排序,自己定义类中所需成员。完成上述功能。
2019-05-10 21:37
736 查看
版权声明:版权所有©漫天风沙里的人 https://blog.csdn.net/qq_30204431/article/details/90084342
【C++语言实现】【本科实验系列】编写程序在CirCle类中实现关系运算符(大于,小于,等于),实现按半径对Circle对象排序,自己定义类中所需成员。完成上述功能。
前言介绍
要求如本文标题所言
废话不多说,直接上代码
代码
(此代码注释特别详细,认真看应该能看懂)
/* 实验四:编写程序在CirCle类中实现关系运算符 (大于,小于,等于),实现按半径对Circle对象排序。 自己定义类中所需成员。完成上述功能。 作者:秦瑞迁(漫天风沙里的人) 本代码已经发布到本人CSDN,供学习者学习使用 注:本题目有很大的拓展性,比如可以加入圆面积计算方法 以及可以用链表来实现动态地搞一个CirCle数组*/ #include<iostream> using namespace std; //圆类型 class CirCle { private: double radius; public: //构造函数声明 CirCle(); //括号形式赋值方法声明 CirCle(double input_radius); //Get半径方法声明 double Get_Radius(); //赋值运算符(一个变量赋值给另一个变量)重载声明 CirCle& operator = (const CirCle& other); //赋值运算符(一个double数赋值)重载声明 CirCle& operator = (double other_radius); //关系运算符==(raidus之间比较)重载声明 bool operator == (const CirCle& other); //关系运算符==(radius与数之间比较)重载声明 bool operator == (double other_radius); //关系运算符>重载声明 bool operator > (const CirCle& other); //关系运算符<重载声明 bool operator < (const CirCle& other); //关系运算符>=重载声明 bool operator >= (const CirCle& other); //关系运算符<=重载声明 bool operator <= (const CirCle& other); //输出流运算符重载声明 friend ostream& operator << (ostream& output,CirCle& c); //输入流运算符重载声明 friend istream& operator >> (istream& input,CirCle& c); }; //构造函数初始化radius方法 CirCle::CirCle() { this->radius = 0; } //括号形式赋值方法实现 CirCle::CirCle(double input_radius) { this->radius = input_radius; } //Get半径方法 double CirCle::Get_Radius() { return this->radius; } //赋值运算符(一个变量赋值给另一个变量)重载实现 CirCle& CirCle::operator = (const CirCle& other) { this->radius = other.radius; return *this; } //赋值运算符(一个double数赋值)重载实现 CirCle& CirCle::operator = (double other_radius) { this->radius = other_radius; return *this; } //关系运算符==(raidus之间比较)重载 bool CirCle::operator == (const CirCle& other) { //如果半径等于右侧CirCle对象的半径 if((this->radius) == other.radius) { //返回真 return true; } //如果半径不等于右侧CirCle对象的半径 else { //返回假 return false; } } //关系运算符==(radius与数之间比较)重载实现 bool CirCle::operator == (double other_radius) { //如果右值相等 if((this->radius) == other_radius) { //返回真 return true; } //否则 else { //返回假 return false; } } //关系运算符>重载实现(实现方法与==雷同) bool CirCle::operator > (const CirCle& other) { if((this->radius > other.radius)) { return true; } else { return false; } } //关系运算符<重载实现 bool CirCle::operator < (const CirCle& other) { if((this->radius < other.radius)) { return true; } else { return false; } } //关系运算符>=重载实现 bool CirCle::operator >= (const CirCle& other) { if((this->radius >= other.radius)) { return true; } else { return false; } } //关系运算符<=重载实现 bool CirCle::operator <= (const CirCle& other) { if((this->radius <= other.radius)) { return true; } else { return false; } } //输出流运算符重载实现 ostream& operator << (ostream& output,CirCle& c) { output<<c.radius; return output; } //输入流运算符重载实现 istream& operator >> (istream& input,CirCle& c) { input>>c.radius; return input; } int main() { //由大到小冒泡排序 CirCle array[4]={4,3,2,1}; for(int i=0;i<3;i++) { for(int j=i+1;j<4;j++) { if(array[i]<array[j]) { CirCle temp = array[i]; array[i]=array[j]; array[j]=temp; } } } for(int i = 0;i<4;i++) { cout<<array[i].Get_Radius()<<endl; } return 0; }
总结
这个实验中规中矩,主要就是练练怎么重载关系运算符,不过呢,接下来我要给出一个装逼方案,可以让老师眼前一亮,本来想自己写链表,但是源代码文件丢了(也是本人水平有限,再写一个链表我头痛得一批),接下来的演示我将直接使用Vector来制作动态对象的版本
装逼代码
对于数组实现可以用Vector来实现,可以搞成动态数组
首先声明一下vector
#include<vector>
然后把主函数的数组排序的算法改成如下这段
vector(CirCle) arr; arr.push_back(1); arr.push_back(2); arr.push_back(3); arr.push_back(2.5);
上面的代码相当于一个动态的数组,依次给数组(其实其本质是链表)依次添加了CirCle对象的元素{1,2,3,2.5}
对于动态数组的冒泡排序可以用如下代码实现
for(int i = 0;i<arr.size();i++) { int val = arr.at(i); cout<<val; }
相关文章推荐
- 编写一个程序,定义一个职工类,输入3个职工的编号、姓名、工资和年龄, 类中的成员函数实现输入、输出,在主函数中定义对象,并计算输出3个职工的平均工资。
- 请编写一个Java程序,接收一个大于等于2的整数,实现下面功能。
- 实验题7.1: 编写一个程序algo7-1.cpp,实现二叉树的各种基本运算,并在此基础上设计一个程序Main.cpp完成如下功能(b为如下图所示的一棵二叉树)
- Java实现分页功能 代码很粗糙,都是根据自己所需去定义逻辑功能的。
- 需要求3个长方体的体积,写一个基于对象的程序,数据成员包括 length width height 要求用成员函数实现以下功能
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象[修订081217]
- 编写程序定义Point类,有数据成员X,Y,为其定义友元函数实现重载+。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 一个自己编写的象棋程序,可实现走棋谱(如炮二平五),工程完成度%96,跟大家分享一下,下一步要做残局,欢迎交流
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 【C++语言实现】【本科实验系列】设计以下类和函数,Person,Student,Teacher……
- 11周2-2项目 - 存储班长信息的学生类,将Stu类的数据成员的访问权限改为private,你的程序是否能完成要求的功能?如果不行,请修改程序。请不要修改给出的代码,只能修改自己写的代码。
- 模块管理常规功能自己定义系统的设计与实现(53--演示程序和视频解说 )
- Linux高级编程——实验六 编写程序完成以下功能: 1.递归遍历/home目录,打印出所有文件和子目录名称及节点号。 2.判断文件类型,如果是子目录,继续进行递归遍历,直到遍历完所有子目录为止。
- SharePoint【ECMAScript对象模型系列】-- 02. 实现编写代码时的智能提示功能
- 以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试
- 编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。