第4章习题举例

2013年4月7日 由 Creater 留言 »

 

前言

由于很多同学问相同的问题,每个同学都一一解答,时间上不允许,所以我挂在网上,大家可以互相学习与解答。

我在博客中挂出部分课后习题代码,我会以我能达到的最规范方式编码。

在另外一个网页中,大家可以粘贴自己的代码互相学习解答,我也会针对每个问题进行解答,链接为:http://unix8.net/forum-108-1.html,密码为2013

可以打开该该链接后保存在收藏夹,以后有任何通知或者更新大家查看也很方便。

当然不仅局限于课本习题,任何关于程序设计方面的问题都可以探讨!

作业

通过作业看出主要有以下几个问题:
1.代码排版错乱
2.命名不规范
3.想更改private成员,最好通过public函数在主函数中修改,也即是很多人的输入操作应该放在主函数中。
4.抄袭严重

代码

代码下载链接4-10.cpp

运行效果如下:

身份证号为[20130001]的员工,信息如下:
编号为:1
性别为:男
生日为:1989年7月1日

身份证号为[20130002]的员工,信息如下:
编号为:2
性别为:女
生日为:1988年7月2日

 

#include <iostream>
#include <string>
using namespace std;

//出生日期类
class CDateOfBirth
{
public:
	~CDateOfBirth();
	//拷贝构造函数类
explicit	CDateOfBirth(const CDateOfBirth& tDate);
	//重载的构造函数,已经具有默认构造函数功能
explicit CDateOfBirth(int tYear, int tMonth, int tDay);

	//提供给外部的接口
	int getYear(void) const;
	int getMonth(void) const;
	int getDay(void) const;
	void setYear(int);
	void setMonth(int);
	void setDay(int);

private:
	int year;
	int month;
	int day;
};
//析构函数
CDateOfBirth::~CDateOfBirth(){}
//拷贝构造函数
CDateOfBirth::CDateOfBirth(const CDateOfBirth& tDate) :
						year(tDate.year), month(tDate.month), day(tDate.day){}
//带默认形参的构造函数
CDateOfBirth::CDateOfBirth(int tYear = 0, int tMonth = 0, int tDay = 0) :
						year(tYear), month(tMonth), day(tDay){}
//内联成员函数
inline int CDateOfBirth::getYear(void)const { return year;}
inline int CDateOfBirth::getMonth(void)const { return month;}
inline int CDateOfBirth::getDay(void)const { return day;}
inline void CDateOfBirth::setYear(int tYear){year = tYear;}
inline void CDateOfBirth::setMonth(int tMonth){month = tMonth;}
inline void CDateOfBirth::setDay(int tDay){day = tDay;}

//人事管理的“人员”类
//这个类部分成员函数演示直接在类中定义,默认就为内联
class CEmployee
{
public:
	//默认构造函数
	explicit CEmployee(){}
	//析构函数
	~CEmployee(){}
	//拷贝构造函数
	explicit	CEmployee(const CEmployee& tEmployee) :
						id(tEmployee.id), sex(tEmployee.sex), card(tEmployee.card), birth(tEmployee.birth){}
	//赋值操作符
	CEmployee& operator=(const CEmployee& tEmployee)
	{
		id = tEmployee.id;
		sex = tEmployee.sex;
		card = tEmployee.card;
		birth = tEmployee.birth;
	}
	//重载的构造函数
	explicit	CEmployee(CDateOfBirth &tBirth, int tId, char tSex, string tCard);
	explicit	CEmployee(int tId, char tSex, string tCard, int tYear, int tMonth, int tDay);
	//提供给外部的接口
	void setId(int tId) {id = tId;}
	void setSex(char tSex) {sex = tSex;}
	void setCard(string tCard) {card = tCard;}
	//设置人员的生日
	void setBirth(int tYear, int tMonth, int tDay)
	{
		birth.setYear(tYear);
		birth.setMonth(tMonth);
		birth.setDay(tDay);
	}
	//设置人员的生日重载
	void setBirth(const CDateOfBirth& tBirth)
	{
		birth.setYear(tBirth.getYear());
		birth.setMonth(tBirth.getMonth());
		birth.setDay(tBirth.getDay());
	}
	int getId(void) const {return id;}
	string getCard(void) const {return card;}
	char getSex(void) const {return sex;}
	const CDateOfBirth& getBirth(void) const {return birth;}

private:
	int id;
	char sex;
	string card;
	CDateOfBirth birth;
};
CEmployee::CEmployee(int tId, char tSex, string tCard, int tYear, int tMonth, int tDay):
	 id(tId), sex(tSex), card(tCard)
{
	birth.setYear(tYear);
	birth.setMonth(tMonth);
	birth.setDay(tDay);
}
CEmployee::CEmployee(CDateOfBirth &tBirth, int tId = 0, char tSex = 'f', string tCard = ""):
	birth(tBirth), id(tId), sex(tSex), card(tCard){}

ostream& operator<<(ostream& out, const CEmployee& employee)
{
	cout<<"身份证号为["<<employee.getCard()<<"]的员工,信息如下:"<<endl;
	cout<<"编号为:"<<employee.getId()<<endl;
	cout<<"性别为:"<<(employee.getSex() == 'f' ? "男":"女")<<endl;;
	cout<<"生日为:"<<employee.getBirth().getYear()<<"年"
			<<employee.getBirth().getMonth()<<"月"<<employee.getBirth().getDay()<<"日"<<endl;
}

int main()
{
	//第一种用法,员工为小王
	//编号+性别+身份证号+年+月+日
	CEmployee XiaoWang(1, 'f', "20130001", 1989, 7, 1);
	//测试小王
	cout<<XiaoWang<<endl;

	//第二种测试,测试为小张
	//生日+编号+性别+身份证号
	CDateOfBirth birth(1988, 7, 2);
	CEmployee XiaoZhang(birth, 2, 'm', "20130002");
	cout<<XiaoZhang<<endl;
	return 0;
}

最好将输入信息放在主函数中完成,比如下面的主函数,要修改某个对象的private数据成员,可以调用public成员函数进行修改。

int main()
{
	//第一种用法,员工为小王
	//编号+性别+身份证号+年+月+日
	CEmployee XiaoWang(1, 'f', "20130001", 1989, 7, 1);
	//测试小王
	cout<<XiaoWang<<endl;

	//第二种测试,测试为小张
	//生日+编号+性别+身份证号
	CDateOfBirth birth(1988, 7, 2);
	CEmployee XiaoZhang(birth, 2, 'm', "20130002");
	cout<<XiaoZhang<<endl;
        //第三种测试,测试为小黄
	int year, month, day;
	int no;
	char sex;
	string card;
	cin>>year>>month>>day>>no>>sex>>card;
	CEmployee XiaoHuang(no, sex, card, year, month, day);
	cout<<XiaoHuang<<endl;

	return 0;
}

有问题或者疑问,请跳转到:http://unix8.net/forum-108-1.html,密码为2013

广告位

发表评论

你必须 登陆 方可发表评论.