实验二类与对象Word文件下载.docx
《实验二类与对象Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验二类与对象Word文件下载.docx(13页珍藏版)》请在冰点文库上搜索。
三、实验注意事项
程序中,需要编写一个可执行函数与main主调函数,自主设计输入、输出值,使得结果可以由控制台显示输出。
四、实验程序代码
(一)盒子程序:
#include<
iostream>
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长度:
"
<
endl;
cin>
>
data[0];
宽度:
data[1];
高度:
data[2];
boxB(data[0],data[1],data[2]);
//构建盒子类对象B并初始化
盒子的体积为:
B.volume()<
\n\n"
return0;
}
(二)Employee类的构造和实现:
string>
classemployee
employee(stringna,stringnum,intpos,stringcty,stringadd)//内联构造函数
name=na;
number=num;
postcode=pos;
city=cty;
address=add;
intchange_name(void)//内联成员函数
cout<
请重新输入姓名:
endl;
cin>
name;
return0;
intchange_number(void)//内联成员函数
请重新输入编号:
number;
intchange_postcode(void)//内联成员函数
请重新输入邮编:
postcode;
intchange_city(void)//内联成员函数
请重新输入城市:
city;
intchange_address(void)//内联成员函数
请重新输入地址:
address;
intdisplay(void);
//由于函数体较大,使用普通成员函数的构造方法
stringname,city,address,number;
//类的数据成员
intpostcode;
intemployee:
:
display(void)//成员函数的构建
cout<
******************\n姓名:
name<
\n编号(末四位):
number<
\n邮编:
postcode<
\n城市:
city<
\n地址:
address<
intmain(void)
employeeP1("
黄楷"
"
4083"
430000,"
武汉"
武汉科技大学青山校区"
);
P1.display();
P1.change_name();
P1.change_number();
P1.change_postcode();
P1.change_city();
P1.change_address();
(三)People类录入程序:
enumSEX{man,woman};
//性别属性为枚举类型
classDate
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)//内联成员函数
year<
年"
month<
月"
day<
日"
~Date(){}//析构函数
unsignedintday,month,year;
classPeople
People(stringna,stringnum,SEXsx,Datebirth,stringid_num);
//构造函数
People(People&
p);
intshow(void);
~People(){}
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&
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姓名:
name<
\n编号:
number<
\n性别:
temp<
\n出生日期:
birthday.show();
身份证号:
id<
\n************************"
stringname,number,id,tem;
unsignedintday,month,year,check=0;
charchoice;
请输入姓名:
cin>
name;
请输入编号:
number;
性别:
A.男B.女"
while(!
check)
{
choice;
switch(choice)
{
case'
A'
a'
sex=man;
check=1;
break;
B'
b'
sex=woman;
default:
check=0;
输入错误请重输:
}
出生年:
year;
月:
month;
日:
day;
id;
Dated(day,month,year);
Peoplep(name,number,sex,d,id);
p.show();
五、实验运行结果
(一)盒子程序:
(二)Employee类的实现:
(三)People类的录入程序:
六、实验心得与体会
通过这次试验我更加熟练的掌握了类的定义和构造。
成员函数可以隐式内联,可以显示内联,构造函数同理。
并且在成员函数体较大时,为了不增加冗余,应当不适用内联,以减小代码大小。
而实验三所习最多:
1.枚举类型的用法,enum类名{类值};
2.拷贝构造函数的定义语法
类名(类名&
引用名){成员名=引用名.成员名;
…}
3.析构函数~类名(){}
4.组合类的定义
组合类构造函数的声明
类名(普通形参…内嵌对象形参…):
内嵌对象(内嵌对象的形参…),…
组合类拷贝构造函数的声明
类名(类名&
引用名):
内嵌对象(引用名.内嵌对象)
{普通成员=引用名.普通成员名;
组合类默认构造函数的声明
类名(){成员=默认值;
5.构造函数的调用
a.内嵌对象的构造函数调用按在组合类定义中出现的顺序,且先调用内嵌对象的构造函数,再实现组合类构造函数函数体;
b.内嵌对象没有出现在初始化列表中,用内嵌对象的默认构造函数;
c.系统自动生成的隐含默认构造函数在初始化时起到作用;
d.没有默认构造函数的成员对象和引用型变量必须初始化;
6.析构函数调用顺序正好与构造函数相反
7.组合类对象初始化时会调用两次内嵌对象的复制构造函数,即实参复制给形参,形参复制给内嵌对象两次。