- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验16构造函数定义与使用
实验?构造函数定义与使用
16.1 概述
一、目的要求
二、.?日期类的声明和对象的定义;
2.集合类的声明和对象的定义;
3.职工类的声明和对象的定义。
16.2 案例
一、学生类的声明及其对象的初始化
1.问题的提出
学生类有成员数据:学号、姓名、性别、年龄、C++成绩;要求有如下成员函数:构造函数、缺省的构造函数、修改成绩的函数、输出所有成员的函数。main()完成对象的定义和有关成员函数的测试。
2.分析
成员数据的确定方法:学号一般由纯数字组成,可以确定为整型数;但当学号中包含有字母、汉字或起始学号由0开始时,应使用字符数组表示。姓名应该用字符数组表示。性别可用字符数组表示汉字“男”或“女”,也可用数字表示(如1表示“男”,2表示“女”,可自己事先约定。)或布尔值表示。而年龄用int类型,考虑到成绩可能会出现有小数,所以用float表示。
成员函数的确定方法:构造函数其作用是完成对对象的成员数据初始化。一般情况下,上述说明的成员数据,在不能通过计算得到时,其数据成员都需要通过构造函数实现初始化。构造函数可以重载,考虑到定义对象时,没有提供初始化所需的数据,定义了缺省的构造函数。为保证数据安全,类中成员数据一般都限定为私有访问权限,所以类中需要定义输出数据的成员函数,当需要访问私有数据成员时,需通过具有公有访问权限的成员函数-公共接口完成。
3.程序代码
class Student{ //学生类的声明
int Id; //学号
char Name[20]; //姓名
char Sex[4]; //性别
int Age; //年龄
float Cpp; //C++成绩
public:
Student() //缺省的构造函数
{ Id=Age=Cpp=0;
Name[0]=Sex[0]=\0; }
Student(int i,char *n,char *s,int a,float c)
{ //构造函数
Id=i;
strcpy(Name,n);
strcpy(Sex,s);
Age=a;
Cpp=c;
}
void SetCpp(float c){Cpp=c;}//修改成绩的函数
void Print() //输出成员数据的函数
{
cout学号:Id\t姓名:Name\t性别:Sex;
cout\t年龄:Age\tC++成绩:Cpp\n;
}
};
void main() //main()函数测试部分
{
Student s1(9907105,张一,男,20,86);//调用构造函数
s1.Print(); //输出
s1.SetCpp(92); //修改C++成绩
s1.Print();
Student s2; //调用缺省的构造函数
s2.Print();
s2=s1;
s2.Print();
}
4.思考
(1) 当类中没有定义缺省的构造函数时,是否会出现语法错误?
(2) 当缺省的构造函数的函数体为空时,输出对象s2的成员数据时,会出现什么结果?
16.3 实验指导
一、日期类的声明和对象的定义
1. 题目要求
声明一个日期类,有成员数据:年、月、日;有成员函数:构造函数实现对所有成员数据的初始化;输出的成员函数,要求输出格式为:年-月-日。main()完成对象的定义和输出成员函数的测试。
2.分析
成员数据年、月、日应该为整型数,并限定为私有访问权限;成员函数限定为公有访问权限。构造函数实现对所有成员数据的初始化,所以构造函数的形参个数和类型,与成员数据的个数和类型一致。
值得注意的是:构造函数实现成员数据初始化时,赋值号的左边是成员名,右边是形参名。
请完成程序代码的编写、调试,并得到正确结果。
3. 思考
如果考虑输入的年、月、日数据是合法数据(即不允许出现13月、32日等),构造函数应如何处理?
二、集合类的声明和对象的定义
1.题目要求
声明一个集合类,有成员数据:int a[10];有成员函数:构造函数(要求完成对数组a中所有元素的初始化);输出的成员函数,要求每行输出5个数;判断一个数是否在数组中的函数,如果在数组中,返回数组中下标的值。main()完成对象的定义和相关成员函数的测试。
2.分析
构造函数要求完成对数组a中所有元素的初始化,其形参应该提供一个具有10个数据的数组或指向该数组的指针变量。如:
构造函数名(int b[])
{ int i;
for(i=0;i10;i++)a[i]=b[i];
}
判断一个数是否在数组中的成员函数,其函数返回值为数组元素的下标,函数的返回值类型应该是整型,
文档评论(0)