第10周编程作业(fnreuibfrf)

本文介绍了如何定义带重载构造函数的日期类,动态生成Person类对象并设置属性,设计Dog类的基本属性和操作,以及测试一个多功能MyTime类。涵盖了日期表示、对象初始化、属性赋值、时间运算和格式输出等功能。
摘要由CSDN通过智能技术生成

第10周编程作业

1定义一个带重载构造函数的日期类

题目内容:

定义一个带重载构造函数的日期类Date,数据成员有年、月、日;成员函数包括:一个带参数的构造函数Date(int,int,int),一个不带参数的构造函数(设置日期为1900年1月1日),一个按“年-月-日”格式显示日期的函数,一个对数据成员赋值的函数void
init(int,int,int)。

主函数中对类的测试要求:
1.
分别使用两个不同的重载构造函数创建两个日期类对象(必须为d1,d2,d2初始值为2100-12-12);
2.
按“年-月-日”格式分别显示两个对象的值;
3. 输入数据,用init函数为d1赋值;
2.按“年-月-日”格式显示对象d1的值;。

输入格式:

给d1赋值的数据

输出格式:

d1的默认值

d2的初始值

d1赋值后的值

输入样例:

2011 4 29

输出样例:

1900-1-1
2100-12-12
2011-4-29

//定义一个带重载构造函数的日期类
#include<iostream>
using namespace std;
class Date
{
	int year, month, day;
public:
	Date();
	Date(int year, int month, int day);
	void show();
	void init(int y, int m, int d);
};
Date::Date()
{
	year = 1900;
	month = 1;
	day = 1;
}
Date::Date(int year, int month, int day)
{
	this->year = year;
	this->month = month;
	this->day = day;//this指针分辨形参和数据
}
void Date::init(int y, int m, int d)
{
	year = y;
	month = m;
	day = d;
}
void Date::show()
{
	cout << year << '-' << month << '-' << day << endl;
}
int main()
{
	int y, m, d;
	cin >> y >> m >> d;
	Date d1, d2(2100, 12, 12);
	d1.show();
	d2.show();
	d1.init(y, m, d);
	d1.show();
	return 0;
}

2动态生成Person类的对象

题目内容:

编写Person类,数据成员为姓名(20字符长度)、年龄(int)和性别(char)。
编写无参数的构造函数,其中姓名赋值为“XXX”,年龄0,性别’m’;
编写析构函数,在其中输出字符串“Now
destroying the instance of
Person”;
编写Register成员函数,为数据成员赋值;
编写showme成员函数,显示姓名、年龄和性别。

编写主函数:
用Person类创建2个指针,p1和
p2;
用new创建两个Person对象,分别将指针赋值给p1,p2;
用showme成员函数显示p1,p2所指对象的值;
再输入一组“姓名、年龄和性别”值,用成员函数Register为p1的成员赋值;
将p1所指对象的值赋值给p2所指对象;
用showme显示p1、p2所指对象的值。
删除动态对象。

输入格式:

为p1的成员赋值时使用的数据

输出格式:

person1和person2的默认值

person1和person2的赋值后的值

析构函数输出的信息

输入样例:

Bobs 24 m

输出样例:

person1:XXX 0 m
person2:XXX 0 m
person1:Bobs 24 m
person2:Bobs 24
m
Now destroying the instance of Person
Now destroying the instance of
Person

//动态生成Person类的对象
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
using namespace std;
class Person
{
private:
	char name[20];
	int age;
	char sex;
public:
	Person();
	~Person();
	void Register(char* n, int a, char s);
	void Showme();
};
Person::Person()
{
	strcpy(name, "XXX");
	age = 0;
	sex = 'm';
}
Person::~Person()
{
	cout << "Now destroying the instance of Person" << endl;
}
void Person::Register(char* n, int a, char s)
{
	strcpy(name, n);
	age = a;
	sex = s;
}
void Person::Showme()
{
	cout << name << " " << age << " " << sex << endl;
}
int main()
{
	char nn[20];
	int aa;
	char sex;
	cin >> nn;
	cin >> aa >> sex;
	/
	Person* p1, * p2;
	p1 = new Person;
	p2 = new Person;
	cout << "person1:";
	p1->Showme();
	cout << "person2:";
	p2->Showme();
	/
	p1->Register(nn, aa, sex);
	*p2 = *p1;
	cout << "person1:";
	p1->Showme();
	cout << "person2:";
	p2->Showme();
	/
	delete p1;
	delete p2;
	return 0;
}

3设计带构造函数的Dog类

题目内容:

设计一个Dog类,包含name、age、sex和weight等属性,在有参数的构造函数中对数据成员进行初始化。

公有成员函数有:GetName()、GetAge()、GetSex()和GetWeight()可获取名字、年龄、性别和体重。编写成员函数speak()
显示狗的叫声。编写主函数,输入狗的名字、年龄、性别和体重;声明Dog对象并用输入的数据通过构造函数初始化对象,通过成员函数获取狗的属性并显示出来。

输入格式:

狗的信息

输出格式:

狗的信息,外加叫声

输入样例:

Tom 4 m 2.4

输出样例:

Tom

4

m

2.4

Arf!Arf!

//设计带构造函数的Dog类
#include<iostream>
#include<cstring>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
class Dog
{private:
	char name[20];
	int age;
	char sex;
	double weight;
public:
	Dog(char* n, int a, char s, double w);
	char* Getname()
	{
		return name;
	}
	int Getage()
	{
		return age;
	}
	char Getsex()
	{
		return sex;
	}
	double Getweight()
	{
		return weight;
	}
	void speak();
};
Dog::Dog(char* n, int a, char s, double w)
{
	strcpy(name, n);
	age = a;
	sex = s;
	weight = w;
}
void Dog::speak()
{
	cout << "Arf!Arf!" << endl;
}
int main()
{
	char name[20];
	int age;
	char sex;
	double weight;
	cin >> name >> age >> sex >> weight;
	Dog d(name, age, sex, weight);
	cout << d.Getname() << endl;
	cout << d.Getage() << endl;
	cout << d.Getsex() << endl;
	cout << d.Getweight() << endl;
	d.speak();
	return 0;
}

4设计并测试一个椭圆类

题目内容:

设计并测试一个名为Ellipse的椭圆类,其属性为圆心坐标及长半轴和短半轴的长度。设计一个构造函数(Ellipse(int,int,double,double))对这些属性进行初始化,并通过成员函数计算出椭圆的面积(double
Area())。

S(椭圆面积)=PI(圆周率)×a(长半轴)×b(短半轴)
其中PI取3.14

输入格式:

圆心坐标、长半轴和短半轴的长度

输出格式:

椭圆的面积

输入样例:

1 1 1 2

输出样例:

6.28

//设计并测试一个椭圆类
#include<iostream>
#define _CRT_SECURE_NO_WARNINGS
#include<cstring>
# define PI 3.14
class Ellipse
{
private:
	int x, y;
	double a, b;
public:
	Ellipse(int, int, double, double);
	double Area();
};
Ellipse::Ellipse(int x, int y, double a, double b)
{
	this->x = x;
	this->y = y;
	this->a = a;
	this->b = b;
}
double Ellipse::Area()
{
	return PI * a * b;
}
int main()
{
	int x, y;
	double a, b;
	std::cin >> x >> y >> a >> b;
	Ellipse ellipse(a, y, a, b);
	std::cout << ellipse.Area() << std::endl;
	return 0;
}

5设计一个多功能的MyTime类

题目内容:

设计一个多功能的MyTime类,设计多个重载的构造函数,可以设置时间,进行时间的加减运算,按各种可能的格式(24小时制、12小时制)输出时间。

注意:

(1)请考虑设置的时间的合理性(时0-23; 分0-59;秒0-59)。

(2)12小时制中,12:00:00前为AM, 12:00:00及以后为PM

(3)加减运算的加数、减数是一个时间的长度,单位为“时、分、秒”

(4)构造函数:没参数时,设置时间为0时 0分 0秒;有参数时,设置成给定的时、分、秒。

在主函数中

(1)声明两个对象t1,t2,并通过构造函数初始化它们(t2初始化为为8:10:30)

(2)显示按12、14小时制显示t1、t2的时间。

(3)再设置t1的时间,数据由用户输入。

(4)再输入待加减的时间。

(5)t1加输入的时间,并按12小时和24小时制显示。

(6)t2减输入的时间,并按12小时和24小时制显示。

输入格式:

第一行为t1的时间,第二行为待加减的时间

输出格式:

显示按12、14小时制显示t1、t2的初始时间

t1加输入的待加减的时间按12小时和24小时制显示。

t2减输入的待加减的时间按12小时和24小时制显示

输入样例:

11 30 30

5 15 20

输出样例:

00:00:00 AM

00:00:00

08:10:30 AM

08:10:30

04:45:50 PM

16:45:50

02:55:10 AM

02:55:10

//设计一个多功能的MyTime类
#include<iostream>
using namespace std;
#define _CRT_SECURE_NO_WARNINGS//还是防止VS2019报安全类型的错误
#include<cstring>
class MyTime
{
private:
	int h, m, s;
public:
	MyTime()
	{
		h = 0;
		m = 0;
		s = 0;
	}
	MyTime(int hh, int mm, int ss);
	MyTime add(MyTime& a);
	MyTime subtract(MyTime& a);
	void show24();//24小时制显示时间
	void show12();//12小时制显示时间
	void set(int,int,int);
};
MyTime::MyTime(int hh, int mm, int ss)
{
	if (hh >= 0 && hh <= 23)
		h = hh;
	if (mm >= 0 && mm <= 59)
		m = mm;
	if (ss >= 0 && ss <= 59)
		s = ss;
}
MyTime MyTime::add(MyTime& a)
{
	int H, M, S;
	H = this->h + a.h;
	M = this->m + a.m;
	S = this->s + a.s;
	if (S >=60)//秒进位
	{
		M++;
		S = S % 60;
	}
	if (M >= 60)//分进位
	{
		H++;
		M = M % 60;
	}
	H = H % 24;//时可能进位
	MyTime aa(H, M, S);
	return aa;
}
MyTime MyTime::subtract(MyTime& a)
{
	int H, M, S;
	H = this->h - a.h;
	M = this->m - a.m;
	S = this->s - a.s;
	if (S < 0)//秒为负数,借分
	{
		M--;
		S = S + 60;
	}
	if (M < 0)//分为负数,借时
	{
		H--;
		M += 60;
	}
	if (H < 0)
		H += 24;//前一天了
	MyTime aa(H, M, S);
	return aa;
}
void MyTime::show24()
{
	if (h <= 9)
		cout << 0;
	cout << h << ':';
	if (m <= 9)
		cout << 0;
	cout << m << ':';
	if (s <= 9)
		cout << 0;
	cout << s << endl;//一位时要补零
}
void MyTime::show12()
{
	bool flag = 0;//记录是AM还是PM,0代表AM,1代表PM
	if (h >= 13)
	{
		flag = 1;
		h -= 12;
	}
	if (h <= 9)
		cout << 0;
	cout << h << ':';
	if (m <= 9)
		cout << 0;
	cout << m << ':';
	if (s <= 9)
		cout << 0;
	cout << s; //一位时要补零
	if (flag)
	{
		cout << " " << "PM" << endl;
	}
	else
	{
		cout << " " << "AM" << endl;
	}
}
void MyTime::set(int hh, int mm, int ss)
{
	if (hh >= 0 && hh <= 23)
		h = hh;
	if (mm >= 0 && mm <= 59)
		m = mm;
	if (ss >= 0 && ss <= 59)
		s = ss;
}
int main()
{
	int h, m, s;
	cin >> h >> m >> s;
	int H, M, S;//待加减的时间
	cin >> H >> M >> S;
	//
	MyTime t1, t2(8, 10, 30);//显示t1和t2的时间
	t1.show12();
	t1.show24();
	t2.show12();
	t2.show24();
	///
	MyTime t3(H, M, S);//t1加上输入的时间
	t1.set(h, m, s);
	(t1.add(t3)).show12();
	(t1.add(t3)).show24();
	//
	(t2.subtract(t3)).show12();//t2减去输入的时间
	(t2.subtract(t3)).show24();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值