实验二类与对象.docx
《实验二类与对象.docx》由会员分享,可在线阅读,更多相关《实验二类与对象.docx(13页珍藏版)》请在冰豆网上搜索。
实验二类与对象
武汉科技大学
C++上机实验报告
实验名称:
实验二类与对象
专业班级:
姓名:
学号:
日期:
2015年12月12日
一、实验目的
1.掌握类的声明与使用
2.掌握成员函数的使用方法
二、实验内容
1.构建一个类,含有三个数据成员,分别表示盒子的三条边长;含有一个成员函数,用来计算盒子的体积。
2.声明一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及chang_name()和display()等函数。
display()显示姓名、街道地址、城市和邮编等属性,chang_name()改变对象的姓名属性,实现并测试这个类。
3.设计一个用于人事管理的People(人员)类。
考虑到通用性,这里只抽象出所有类型人员都具有的属性:
number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。
其中“出生日期”声明为一个“日期”类内嵌子对象。
用成员函数实现对人员信息的录入和显示。
要求包括:
构造函数、析构函数、拷贝构造函数、内联成员函数等。
三、实验注意事项
程序中,需要编写一个可执行函数与main主调函数,自主设计输入、输出值,使得结果可以由控制台显示输出。
四、实验程序代码
(一)盒子程序:
#include
usingnamespacestd;
classbox//盒子类
{
public:
classbox(floata,floatb,floatc)//内联构造函数
{
length=a;
width=b;
hight=c;
}
floatvolume()//内联成员函数
{
returnlength*width*hight;
}
private:
floatlength,width,hight;//长宽高
};
intmain()//主调函数
{
floatdata[3];
while
(1)
{
cout<<"***************\n请输入盒子的\n\n长度:
"<cin>>data[0];
cout<<"宽度:
"<cin>>data[1];
cout<<"高度:
"<cin>>data[2];
boxB(data[0],data[1],data[2]);//构建盒子类对象B并初始化
cout<<"盒子的体积为:
"<}
return0;
}
(二)Employee类的构造和实现:
#include
#include
usingnamespacestd;
classemployee
{
public:
employee(stringna,stringnum,intpos,stringcty,stringadd)//内联构造函数
{
name=na;
number=num;
postcode=pos;
city=cty;
address=add;
}
intchange_name(void)//内联成员函数
{
cout<<"请重新输入姓名:
"<cin>>name;
return0;
}
intchange_number(void)//内联成员函数
{
cout<<"请重新输入编号:
"<cin>>number;
return0;
}
intchange_postcode(void)//内联成员函数
{
cout<<"请重新输入邮编:
"<cin>>postcode;
return0;
}
intchange_city(void)//内联成员函数
{
cout<<"请重新输入城市:
"<cin>>city;
return0;
}
intchange_address(void)//内联成员函数
{
cout<<"请重新输入地址:
"<cin>>address;
return0;
}
intdisplay(void);//由于函数体较大,使用普通成员函数的构造方法
private:
stringname,city,address,number;//类的数据成员
intpostcode;
};
intemployee:
:
display(void)//成员函数的构建
{
cout<<"******************\n姓名:
"<"<"<"<"<
return0;
}
intmain(void)
{
employeeP1("黄楷","4083",430000,"武汉","武汉科技大学青山校区");
P1.display();
P1.change_name();
P1.display();
P1.change_number();
P1.display();
P1.change_postcode();
P1.display();
P1.change_city();
P1.display();
P1.change_address();
P1.display();
return0;
}
(三)People类录入程序:
#include
#include
usingnamespacestd;
enumSEX{man,woman};//性别属性为枚举类型
classDate
{
public:
Date(unsignedintdy,unsignedintmon,unsignedintyr)//内联构造函数
{
day=dy;
month=mon;
year=yr;
}
Date()//默认构造函数
{
day=0;
month=0;
year=0;
}
Date(Date&d)
{
day=d.day;
month=d.month;
year=d.year;
}
intshow(void)//内联成员函数
{
cout<return0;
}
~Date(){}//析构函数
private:
unsignedintday,month,year;
};
classPeople
{
public:
People(stringna,stringnum,SEXsx,Datebirth,stringid_num);//构造函数
People(People&p);
intshow(void);
~People(){}
private:
stringname,number,id;//类的数据成员
Datebirthday;//内嵌对象生日
SEXsex;//性别
};
People:
:
People(stringna,stringnum,SEXsx,Datebirth,stringid_num):
birthday(birth)//组合类构造函数
{
name=na;
number=num;
sex=sx;
id=id_num;
}
People:
:
People(People&p):
birthday(p.birthday)//组合类复制构造函数
{
name=p.name;
number=p.number;
sex=p.sex;
id=p.id;
}
intPeople:
:
show(void)
{
stringtemp;
if(sex==man)temp="男";
elsetemp="女";
cout<<"************************\n姓名:
"<"<"<";
birthday.show();
cout<<"身份证号:
"<return0;
}
intmain(void)
{
stringname,number,id,tem;
unsignedintday,month,year,check=0;
charchoice;
SEXsex;
cout<<"请输入姓名:
"<cin>>name;
cout<<"请输入编号:
"<cin>>number;
cout<<"性别:
A.男B.女"<while(!
check)
{
cin>>choice;
switch(choice)
{
case'A':
case'a':
sex=man;check=1;break;
case'B':
case'b':
sex=woman;check=1;break;
default:
check=0;cout<<"输入错误请重输:
"<}
}
cout<<"出生年:
";
cin>>year;
cout<<"月:
";
cin>>month;
cout<<"日:
";
cin>>day;
cout<<"身份证号:
"<cin>>id;
Dated(day,month,year);
Peoplep(name,number,sex,d,id);
p.show();
return0;
}
五、实验运行结果
(一)盒子程序:
(二)Employee类的实现:
(三)People类的录入程序:
六、实验心得与体会
通过这次试验我更加熟练的掌握了类的定义和构造。
成员函数可以隐式内联,可以显示内联,构造函数同理。
并且在成员函数体较大时,为了不增加冗余,应当不适用内联,以减小代码大小。
而实验三所习最多:
1.枚举类型的用法,enum类名{类值};
2.拷贝构造函数的定义语法
类名(类名&引用名){成员名=引用名.成员名;…}
3.析构函数~类名(){}
4.组合类的定义
组合类构造函数的声明
类名(普通形参…内嵌对象形参…):
内嵌对象(内嵌对象的形参…),…
组合类拷贝构造函数的声明
类名(类名&引用名):
内嵌对象(引用名.内嵌对象)
{普通成员=引用名.普通成员名;…}
组合类默认构造函数的声明
类名(){成员=默认值;…}
5.构造函数的调用
a.内嵌对象的构造函数调用按在组合类定义中出现的顺序,且先调用内嵌对象的构造函数,再实现组合类构造函数函数体;
b.内嵌对象没有出现在初始化列表中,用内嵌对象的默认构造函数;
c.系统自动生成的隐含默认构造函数在初始化时起到作用;
d.没有默认构造函数的成员对象和引用型变量必须初始化;
6.析构函数调用顺序正好与构造函数相反
7.组合类对象初始化时会调用两次内嵌对象的复制构造函数,即实参复制给形参,形参复制给内嵌对象两次。