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

news2024/9/19 19:31:57
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.coloradmin.cn/o/660181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言,BMP格式解析,生成不同位深的图片。

0.前言 目录 0.前言 1.BMP格式详解 1.1图片的构成 1.2BMP格式 1.2.1文件头 1.2.2位图信息头 1.2.3调色板 1.2.4位图数据 2.生成 3.总结 最近工作任务繁重且对我来说小有难度&#xff0c;但是没有困难的事情做起来怎么有收获呢&#xff1f; 今天推荐一本书《寻找光…

Windows10环境下载安装Oracle19c教程

Windows10环境下载安装Oracle19c教程 前言1. 官网下载2. 运行setup.exe2.1 解压缩2.2 报错解决 3.正式安装3.1 配置选项3.2 系统类3.3 oracle主目录用户3.4 安装位置3.5 先决条件检查3.6 安装产品3.7 安装完成3.8 完全卸载oracle(非必备) 4. 安装验证4.1 CMD验证4.2 SQL Plus4.…

本周大新闻|Quest游戏订阅服务曝光;平价版苹果XR头显25年推出

本周XR大新闻&#xff0c;AR方面&#xff0c;彭博苹果预计25年推出更亲民头显&#xff1b;Vision Pro外屏含微透镜&#xff1b;WWDC23苹果高管脱口秀爆料更多细节&#xff1b;外媒爆料称Vision Pro预期销量改为15万台&#xff1b;VitreaLab展示RGB激光背光技术。还是提前说一下…

leetcode刷题之字符串相关问题

344.反转字符串 方法一&#xff1a;找中间结点&#xff0c;头尾翻转 var reverseString function(s) {let len s.lengthlet mid Math.floor((s.length - 1) / 2) //向下取整 如果长度是奇数&#xff0c;那么mid是最中间的结点 如果长度是偶数&#xff0c;那么mid是中间两个…

【Java技术专题】「攻破技术盲区」带你攻破你很可能存在的Java技术盲点之动态性技术原理指南(反射技术专题)

带你攻破你很可能存在的Java技术盲点之动态性技术原理指南 带你攻破你很可能存在的Java技术盲点之动态性技术原理指南编程语言的类型静态类型语言动态类型语言 技术核心方向反射API反射案例介绍反射功能操作获取构造器长度可变的参数 - 构造方法使用反射 API 获取参数长度可变的…

【软件测试】

系列文章目录 文章目录 系列文章目录前言第四章 单元测试4.1 软件测试过程概述4.2 什么是单元测试4.2.1 单元测试的定义4.2.2 单元测试的重要性4.2.3 单元测试原则 4.3 单元测试的目标和任务4.3.1 单元测试的目标&#xff1a;单元模块被正确编码4.3.2 单元测试的主要任务 4.4 单…

FreeRTOS:事件标志组

目录 一、事件标志组简介1.1事件位(事件标志)1.2事件组1.3事件标志组和事件位的数据类型 二、创建事件标志组2.1函数 xEventGroupCreate()2.2函数xEventGroupCreateStatic() 三、设置事件位3.1函数 xEventGroupClearBits()3.2函数xEventGroupClearBitsFromISR()3.3函数 xEventG…

Python模块MarkupPy 自定义html报告

简介 MarkupPy是Python模块用于生成HTML和XML格式的字符串。它的主要作用是提供了一种比原生HTML/XML更加易读和易写的编写方式&#xff0c;通过Python代码来生成HTML或XML代码。 使用MarkupPy&#xff0c;可以在Python中使用不同的对象类型和方法&#xff0c;来动态地生成HTML…

做自动化测试老是失败?你真的会做吗?资深测试的总结整理...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 自动化正在不断普…

揭开生成式人工智能的力量:60+医疗保健应用场景

预计生成式AI在医疗保健领域的增长速度将超过任何其他行业。在医疗技术领域&#xff0c;AI可带来更高效流程、个性化客户互动、更大的创新和更高价值。为了帮助领导者理解这些机会&#xff0c;BCG最近研究了医疗技术中生成式AI的60多个应用场景&#xff1a;从产研和软件开发到业…

Android自动化测试,5个必备的测试框架

Appium Appium是一个开源的移动测试工具&#xff0c;支持iOS和Android&#xff0c;它可以用来测试任何类型的移动应用&#xff08;原生、网络和混合&#xff09;。作为一个跨平台的工具&#xff0c;你可以在不同的平台上运行相同的测试。为了实现跨平台的功能&#xff0c;Appi…

关于数据库索引的入门简述

一、简介 数据库索引是现代数据库中高效数据检索的一个重要工具。它在优化查询性能和加快数据检索操作方面发挥着重要作用。这里我们深入了解下数据库索引其内部工作原理、优点和局限性。 二、数据库 1、SQL 数据库 为了理解索引&#xff0c;先说一句数据库&#xff0c;数据库…

Jenkins小技巧汇总

设置变量 设置全局环境变量 全局变量除了系统内置的全局环境变量之外&#xff0c;用户也可以设置全局变量。设置路径&#xff1a;【Dashboard】–>【Manage Jenkins】–>【System Configuration 下的 System】–>【Global properties】从描述中我们可以看到&#xf…

Jetson nano 之 ROS入门 - - 深度学习环境配置

文章目录 前言一、Anaconda安装二、Pytorch 与 TensorFlow 环境配置三、TensorRT 推理引擎配置总结 前言 Jetson Nano是一款由NVIDIA推出的小型计算机&#xff0c;其性能优异、功耗低、体积小巧&#xff0c;非常适合用于嵌入式系统和边缘设备的深度学习应用。Jetson Nano搭载了…

【Git原理与使用】-- 基本操作

目录 添加文件 查看objects中的文件 小结 修改文件 版本回退 回退的回退 小结 撤销修改 情况一&#xff1a;对于工作区的代码&#xff0c;还没有 add 情况二&#xff1a;已经 add &#xff0c;但没有 commit 情况三&#xff1a;已经 add &#xff0c;并且也 commit …

Cordic IP核使用说明以及避坑记录

Cordic IP核使用说明以及避坑记录 参考文章&#xff1a;(140条消息) Vivado cordic IP核rotate和translate使用详解(附有代码)_cordic ip核 rotate_迎风打盹儿的博客-CSDN博客 (140条消息) VIVADO cordic IP核_卡布奇诺加勺糖的博客-CSDN博客 文章目录 Cordic IP核使用说明以及…

面试题:推排序是一种稳定排序吗?

面试题&#xff1a;推排序是一种稳定排序吗&#xff1f; 在回答该问题前&#xff0c;首先需要了解什么是稳定排序。 稳定性就是指对于两个关键字相等的记录&#xff0c;它们在序列中的相对位置&#xff0c;在排序之前和排序之后没有发生改变。通俗地讲就是有两个关键字相等的…

Node.js---菜鸟教程

文章目录 创建第一个应用创建 Node.js 应用 NPM 使用介绍使用 npm 命令安装模块本地安装使用 package.json模块的操作 回调函数阻塞代码实例非阻塞代码 事件循环事件驱动程序 EventEmitterEventEmitter 类方法实例error 事件继承 EventEmitter Buffer&#xff08;缓冲区&#x…

Redis-缓存

新增或者更新数据时,创建以后顺便存到redis中去【维护缓存】 获取的时候先从redis缓存中拿数据 如果拿数据的时候为空,则到数据库中拿数据,后再存到redis缓存中去 大量的商品【包括冷门商品】都进行上面的缓存,那么就很耗内存 针对每个数据进行缓存的时候 维护一个过期时间…

MQTT(一)

MQTT&#xff08;一&#xff09; 1.背景 学习目标&#xff1a;经过了解&#xff0c;Netty占用服务器资源内存大、远距离传感器在极端条件下数据处理兼容较差&#xff08;网络条件差&#xff0c;需要反复重连等&#xff09;。从同行业了解到&#xff0c;现在主流工业传输使用M…