某农业大学c/c++第五次实验(类和对象)

news/2024/11/28 9:47:46/
1.Time时间类

【问题描述】

设计一个Time类,并设计多个重载的构造函数,可以设置时间、进行时间的加减运算、按12小时格式和24小时格式输出时间。

例如:

其中构造函数Time::Time(int s)根据总秒数计算hour、minute、second并构造对象;

成员函数void Time::print_12()按12小时格式显示时间,如“09:20:45 AM”、“03:15:20 PM”;

成员函数void Time::print_24()按24小时格式显示时间,如“09:20:45”、“4:30:20”;

成员函数Time Time::Add(Time&)用来实现两个时间对象的值进行相加;(请注意:创建临时对象保存结果,并返回该对象)

成员函数Time Time::Sub(Time&)用来实现两个时间对象的值进行相减。(请注意:使用时间值大的减去小的,避免出现负数情况)

为了检验Time类的功能,主函数按如下方式设计:

【输入形式】无输入

【输出形式】程序运行结果

【样例输入】无

【样例输出】

t2:01:23:34 PM

t2:13:23:34

t1+t2:15:57:34

t1-t2:10:49:34

t3:01:02:03

#include<bits/stdc++.h>
using namespace std;class Time
{
private:int hour,minute,second;
public:int SecCalc()//返回总秒数{ return(hour*60+minute)*60+second; }Time(int h,int m,int s=0);//构造函数Time(int s=0);//根据总秒数计算hour、minute、second并构造对象void SetTime(int h=0,int m=0, int s=0);void print_12();//按12小时格式显示时间void print_24();//按24小时格式显示时间Time Add(Time &);//实现两个时间对象的值进行相加Time Sub(Time &);//实现两个时间对象的值进行相减
};Time::Time(int h,int m,int s)//构造函数
{hour=h;minute=m; second=s;
}Time::Time(int s)//根据总秒数计算hour、minute、second并构造对象
{hour=s/3600;minute=(s-hour*3600)/60;second=s-hour*3600-60*minute;
}void Time::SetTime(int h,int m, int s)
{hour=h; minute=m; second=s;
}void Time::print_12()//按12小时格式显示时间
{if(hour>12){cout << setw(2) << setfill('0') << hour-12 << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second << " PM";}else{cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second << " AM";}
}void Time::print_24()
{cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second;
}Time Time::Add(Time &t)//实现两个时间对象的值进行相加
{Time tt;tt.second = second+t.second;tt.minute = tt.second/60 + minute + t.minute;tt.second %= 60;tt.hour = tt.minute/60 + hour + t.hour;tt.minute %= 60;tt.hour %= 24;return tt;
}Time Time::Sub(Time &t)//实现两个时间对象的值进行相减
{int s = fabs( this->SecCalc() - t.SecCalc() );Time tt(s);return tt;
}int main()
{Time t1(2,34),t2,t3(3723);t2.SetTime(13,23,34);cout<<"t2:";t2.print_12();cout<<endl<<"t2:";t2.print_24();cout<<"\nt1+t2:";t1.Add(t2).print_24();cout<<"\nt2-t1:";t2.Sub(t1).print_24();cout<<endl<<"t3:";t3.print_24();return 0;
}
2.椭圆类——2(拷贝构造函数和析构函数)

【问题描述】

(1)拷贝(复制)构造函数的实现。在已经完成的“椭圆类——1的基础上,增加一个拷贝构造函数。函数原型格式:Ellipse(const Ellipse & e);

(2)增加Show()函数,显示椭圆的外切矩形的顶点坐标。

(3)增加一个成员函数Fun(int y),将椭圆外切矩形的左上角和右下角的纵坐标分别加y和减y。

(4)增加析构函数,在析构函数中输出“xigou”以及待析构对象的外切矩形左上角的横纵坐标。

【输入形式】在主函数中输入顶点坐标后创建一个对象,并用该对象作为初始值再创建一个新对象。输入一个值,用于修改新对象的外切矩形的纵坐标。  

【输出形式】在主函数里调用这2个对象的Show函数分别输出外切矩形的顶点坐标,调用Area函数分别计算并输出椭圆的面积。接收修改值y后,调用Fun函数修改新对象的纵坐标。重新计算新对象的面积并输出。

【样例输入】

-3 1 3 -1

1

【样例输出】

-3 1 3 -1

-3 1 3 -1

9.4245

9.4245

18.849

xigou -3 2

xigou -3 1

#include<bits/stdc++.h>
using namespace std;class Ellipse
{
private:int x1,y1,x2,y2;
public:Ellipse(int a,int b,int c,int d){x1=a;y1=b;x2=c;y2=d;}Ellipse(const Ellipse & e){x1=e.x1;x2=e.x2;y1=e.y1;y2=e.y2;}~Ellipse(){cout<<"xigou "<<x1<<" "<<y1<<endl;}void Show(){cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2<<endl;}void Fun(int y){y1 += y;y2 -= y;}double Area(){return 3.1415*(y2-y1)*(x1-x2)/4.0;}
};int main()
{int x1,x2,y1,y2,y;cin>>x1>>y1>>x2>>y2;cin>>y;Ellipse a(x1,y1,x2,y2);Ellipse a2(a);a.Show();a2.Show();cout<<a.Area()<<endl;a2.Fun(y);cout<<a.Area()<<endl;cout<<a2.Area()<<endl;return 0;
}
3.String类(资源空间问题、深复制与浅复制)

【问题描述】

自行编写代码完成自己的String类。注意这里的String字符S大写,主要目的是与C++自带的string类相互区分。

class String //请勿修改本类的声明,请实现具体的成员函数。

{

public:

  String(const char *str=NULL);  //构造函数

  String(const String &r);  //拷贝构造函数

  ~String();  //析构函数

private:

  char *mydata;  //请勿修改数据成员的类型

};

int main() //请勿修改主函数

{

  String s1,s2("hello");

  String s3(s2);

  return 0;   

请在构造函数、拷贝构造函数、析构函数的函数体里添加相应的cout语句,输出对应的提示。

【输入形式】无输入

【输出形式】构造函数、拷贝构造函数和析构函数里的提示语句

【样例输入】无

【样例输出】

gouzao

gouzao hello

kaobei gouzao hello

xigou hello

xigou hello

xigou

#include<bits/stdc++.h>
using namespace std; class String //请勿修改本类的声明,请实现具体的成员函数。
{
public:String(const char *str=NULL);  //构造函数String(const String &r);  //拷贝构造函数~String();  //析构函数
private:char *mydata;  //请勿修改数据成员的类型
};String::String(const char *str)
{if(str==NULL){cout << "gouzao"<<endl;mydata=NULL;}else{cout << "gouzao "<<str<<endl;mydata=new char[10];strcpy(mydata,str);//复制字符串 }
}String::String(const String &r)
{cout << "kaobei gouzao " << r.mydata << endl;mydata=new char[10];strcpy(mydata,r.mydata);//复制字符串 
}String::~String()//析构函数
{if( mydata==NULL ){cout << "xigou" << endl;}else{cout << "xigou " << mydata << endl;}
}int main() //请勿修改主函数
{String s1,s2("hello");String s3(s2);return 0;
}
4.椭圆类——3 (类的复杂设计)

【问题描述】

(1)在前一周作业题(椭圆类——2)的基础上,增加一个Point类(点类),包括私有成员横纵坐标x和y(均为int型),以及参数带默认值的构造函数Point(x=0,y=0);

(2)给Point类增加拷贝(复制)构造函数Point(Point& p);

(3)增加析构函数~Point();输出"Point xigou"以及待析构的点的横纵坐标。

(4)增加取横纵坐标值的函数int GetX(); int GetY();

(5)删除Ellipse类原来的四个数据成员,重新修改为 Point a,b;

(6)修改Ellipse原来的构造函数Ellipse(int x1,int y1,int x2,int y2);注意使用冒号语法对组合成员进行构造,并在构造函数里输出“gouzao 1”和x1,y1,x2,y2的值。

(7)增加一个Ellipse类的构造函数Ellipse(Point &p1,Point &p2); 并在构造函数里输出“gouzao 2”和x1,y1,x2,y2的值。

(8)修改Ellipse的析构函数的输出内容为“Ellipse xigou”以及待析构对象的外切矩形右下角的横纵坐标。

(9)去掉Ellipse类的拷贝构造函数、Fun函数,并修改剩余函数里的错误。   

【输入形式】

主函数:输入四个坐标点,用其初始化一个Ellipse对象e1。输入两对坐标点,用其初始化2个Point对象p1和p2。用p1和p2初始化一个新的Ellipse对象e2。最后调用e1和e2的Show函数分别显示坐标,调用e1和e2的Area函数计算并输出。    

【输出形式】

程序运行结果

【样例输入】 

-3 1 3 -1

-3 2

3 -2

【样例输出】

gouzao 1 -3 1 3 -1

gouzao 2 -3 2 3 -2

-3 1 3 -1

-3 2 3 -2

9.4245

18.849

Ellipse xigou 3 -2

Point xigou 3 -2

Point xigou -3 2

Point xigou 3 -2

Point xigou -3 2

Ellipse xigou 3 -1

Point xigou 3 -1

Point xigou -3 1

#include<bits/stdc++.h>
using namespace std;class Point
{
private:int px,py;
public:Point(int x,int y){px=x;py=y;}Point(Point& p){px=p.px;py=p.py;}~Point(){cout << "Point xigou " << px << " " << py << endl;}int GetX(){return px;}int GetY(){return py;}
};class Ellipse
{
private:Point a,b;
public:Ellipse(int x1,int y1,int x2,int y2);Ellipse(Point &p1,Point &p2);~Ellipse(){cout <<"Ellipse xigou "<<b.GetX()<<" "<<b.GetY()<<endl;}void Show(){cout << a.GetX() << " " << a.GetY() << " "<<b.GetX()<<" "<<b.GetY()<<endl;}double Area(){return 3.1415*fabs(b.GetX()-a.GetX()) * fabs(b.GetY()-a.GetY())/4.0;}
};Ellipse::Ellipse(int xx1,int yy1,int xx2,int yy2):a(xx1,yy1),b(xx2,yy2)
{cout << "gouzao 1 " << a.GetX() << " " << a.GetY() << " " << b.GetX() << " " << b.GetY() << endl;
}Ellipse::Ellipse(Point &p1,Point &p2):a(p1),b(p2)
{cout <<"gouzao 2 "<<a.GetX()<<" "<<a.GetY()<<" "<<b.GetX()<<" "<<b.GetY()<<endl;
}int main()
{int x1,y1,x2,y2,x3,y3,x4,y4;cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4;Ellipse e1(x1,y1,x2,y2);Point p1(x3,y3);Point p2(x4,y4);Ellipse e2(p1,p2);e1.Show();e2.Show();cout << fixed << setprecision(4) << e1.Area() << endl;cout << fixed << setprecision(3) << e2.Area() << endl;return 0;
}
5.椭圆类——1(类的设计)

【问题描述】

设计并测试一个名为Ellipse的椭圆类:

(1)其私有数据成员为外切矩形的左上角与右下角两个点的坐标(4个int型数据成员x1,y1,x2,y2)

(2)声明4个公有的成员函数分别访问椭圆的外切矩形的顶点坐标,例如int Getx1();

(3)设计1个构造函数Ellipse(int,int,int,int)对椭圆的外切矩形的顶点坐标赋值

(4)设计1个公有成员函数Area()计算椭圆的面积。

【输入形式】在主函数里输入顶点坐标,并声明一个Ellipse类的对象。 

【输出形式】在主函数里调用该对象的成员函数输出外切矩形的顶点坐标,计算并输出椭圆的面积。 

【样例输入】 

-3 1 3 -1

【样例输出】

-3 1 3 -1

9.4245

#include<bits/stdc++.h>
using namespace std;class Ellipse
{
private:int  x1,y1,x2,y2;
public:Ellipse(int a,int b,int c,int d){x1=a;y1=b;x2=c;y2=d;}int getx1(){return x1;}int getx2(){return x2;}int gety1(){return y1;}int gety2(){return y2;}double Area(){return 3.1415*(y2-y1)*(x1-x2)/4.0;}
};int main()
{int x1,x2,y1,y2;cin>>x1>>y1>>x2>>y2;Ellipse a(x1,y1,x2,y2);cout << a.getx1()<<" "<<a.gety1()<<" "<<a.getx2()<<" "<<a.gety2()<<endl;cout << a.Area();return 0;
}

http://www.ppmy.cn/news/455076.html

相关文章

创建nextjs项目动态路由

官网 创建nextjs项目 npx create-next-applatest # or yarn create next-app开始nextjs服务 yarn dev #npm run dev修改next项目 pages/index.js {/*可以修改为pages/index.jsx*/} import styles from /styles/Home.module.css import Test from "/components/Test/Tes…

go初识iris框架(一)

iris初始化项目 我找到的文档 mkdir myappcd myappgo mod init myapp对go mod不是很清楚的可以看这篇 go get github.com/kataras/iris/v12latest如果出现以下问题&#xff0c;可以尝试go env -w GOPROXYhttps://goproxy.io,direct go env -w GOPROXYhttps://goproxy.io,di…

flutter学习之旅 - Wrap组件

文章目录 Wrap组件使用Wrap组件实现电商App搜索页面布局 Wrap组件 Wrap可以实现流布局&#xff0c;单行的Wrap跟Row表现几乎一致&#xff0c;单列的Wrap跟Column都是单行单列的; Wrap则突破了这个限制,mainAxis上的空间不足时&#xff0c;则向crossAxis上去扩展 属性说明direct…

重要网址记录

http://www.knowsky.com/tools/ad/ http://sarin.iteye.com/blog/1561894 android开发笔记 http://www.xwcms.net/ 素材网 http://www.imanhua.com/comic/3352/list_83384.html?p5 动漫网址(野良神) http://www.miniui.com/download/ miniUI 转载于:https://www.cnblogs.co…

【爬虫之路】批量下载5sing上一位歌手的全部歌曲

*16-3-27更新&#xff0c;原方法已失效&#xff0c;仅供参考 实现思路是这样的&#xff1a; 1.访问songer的所有作品列表页&#xff0c;例如&#xff1a; http://5sing.kugou.com/marblue/fc/1.html 显示的是songer的翻唱作品第一页&#xff0c;修改链接访问所有作品列表页…

selenium 调用本地浏览器插件

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!selenium 使用本地浏览器插件 环境 win10Python3.9selenium 4.10查看chrome配置文件路径 地址栏输入 ​​…

Misc(6)

隐藏的钥匙 还是一样挨个试&#xff0c;详细信息里没有发现flag信息&#xff0c;就用010打开试试 文件头正常&#xff0c;暂时没有发现隐藏文件 喝&#xff0c;多搜搜还是有收获的&#xff0c;一开始以为是有隐藏文件就利用ctrlf在010中进行搜索 分别搜索了txt和rar文件都没有反…

apk反编译工具APK改之理少月版

http://www.downxia.com/downinfo/263443.html