C++实验一类与简单对象.docx
《C++实验一类与简单对象.docx》由会员分享,可在线阅读,更多相关《C++实验一类与简单对象.docx(16页珍藏版)》请在冰豆网上搜索。
C++实验一类与简单对象
天津理工大学实验报告
学院(系)名称:
计算机与通信工程学院
姓名
学号
专业
计算机科学与技术
班级
教学班
实验项目
实验一类与简单对象
课程名称
高级程序设计语言II
课程代码
实验时间
2016年9月6日第7、8节
实验地点
计算机软件实验室7-219
批改意见
成绩
教师签字:
实验目的:
(1)理解类和对象的概念;
(2)掌握类与对象的定义方法;
(3)理解类的成员的访问控制的含义,公有和私有成员的区别;
(4)掌握构造函数和析构函数的含义与作用、定义方式和实现;
(5)能够根据给定的要求定义类并实现类的成员函数;
(6)掌握string类的使用方法
(7)了解C++面向对象程序设计的基本思想、基本方法和基本步骤;
(8)掌握MSVisualC++6.0或DEVC++调试C++程序的基本方法、基本步骤。
实验内容:
一、实验名称:
类和简单对象。
二、实验目的:
(1)理解类和对象的概念;
(2)掌握类与对象的定义方法;
(3)理解类的成员的访问控制的含义,公有和私有成员的区别;
(4)掌握构造函数和析构函数的含义与作用、定义方式和实现;
(5)能够根据给定的要求定义类并实现类的成员函数;
(6)掌握string类的使用方法
(7)了解C++面向对象程序设计的基本思想、基本方法和基本步骤;
(8)掌握MSVisualC++6.0或DEVC++调试C++程序的基本方法、基本步骤。
三、练习项目
1.
输入下列程序,按要求进行实验,并记录实验的结果。
#include
usingnamespacestd;
classCoordinate
{
public:
Coordinate(intx1,inty1){x=x1;y=y1;}
Coordinate(Coordinate&p);
~Coordinate(){cout<<"Destructoriscalled."<intgetx(){returnx;}
intgety(){returny;}
private:
intx,y;
};
Coordinate:
:
Coordinate(Coordinate&p){
x=p.x;y=p.y;
cout<<"Copyinitianizationconstructoriscalled."<}
intmain(){
Coordinatep1(3,4);
Coordinatep2(p1);
Coordinatep3=p2;
cout<<"p3=("<return0;
}
(1)记录程序的运行结果
(2)将Coordinate类中带有两个参数的构造函数进行修改,在函数体内增加如下语句:
cout<<”Constructoriscalled.”<重新记录程序的运行结果,并解释输出结果。
(3)按下列要求进行测试。
在主函数体内,添加如下语句:
Coordinatep4;
Coordinatep5
(2);
测试程序会出现什么错误?
为什么?
如何对已有的构造函数进行适当的修改?
(4)结合第
(2)和第(3)步的修改和运行结果:
分析创建不同的对象时如何调用适当的构造函数?
1.
.
2.
调用一次构造函数。
3.
Coordinatep4;
Coordinatep5
(2);错误,因为类没有默认的构造函数,也没有无参数的构造函数和一个参数的构造函数;
改正可为:
将Coordinate(intx1,inty1){x=x1;y=y1;}改为Coordinate(intx1=0,inty1=0){x=x1;y=y1;}
4.系统会自动根据参数的类型和参数的个数,调用合适的函数。
2.
根据注释语句的提示实现类Date的成员函数,并将完整的程序编译、连接成功以保证程序能够正确运行。
#include
classDate{
public:
voidprintDate();//显示日期
voidsetDay(int);//设置日的值
voidsetMonth(int);//设置月的值
voidsetYear(int);//设置年的值
private:
intday,month,year;
};
intmain(){
DatetestDay;
testDay.setDay(5);
testDay.setMonth(10);
testDay.setYear(2010);
testDay.printDate();
return0;
};
完整如下:
#include
classDate{
public:
voidprintDate();//显示日期
voidsetDay(int);//设置日的值
voidsetMonth(int);//设置月的值
voidsetYear(int);//设置年的值
private:
intday,month,year;
};
voidDate:
:
setDay(inta)
{day=a;}
voidDate:
:
setMonth(intb)
{month=b;}
voidDate:
:
setYear(intc)
{year=c;}
voidDate:
:
printDate()
{cout<intmain(){
DatetestDay;
testDay.setDay(5);
testDay.setMonth(10);
testDay.setYear(2010);
testDay.printDate();
return0;
};
运行结果:
3.
下面是一个计算器类的定义,请完成该类的成员函数的实现,并设计一个主函数使用该类和相关成员函数以测试
该类设计的正确性。
#include
usingnamespacestd;
classcoutner
{
public:
counter(intnumber);//构造函数
voidincrement();//给value原值加1
voiddecrement();//给value原值减1
intgetvalue();//计数器值
voidprint();//显示计数
privat取得e:
intvalue;//数据成员
};
intmain(){
...//定义counter类的几个对象并调用有关成员函数
return0;
}
程序如下:
#include
usingnamespacestd;
classcoutner{
public:
coutner(intnumber):
value(number)//构造函数
{}
voidincrement();//给value原值加1
voiddecrement();//给value原值减1
intgetvalue();//取得计数器值
voidprint();//显示计数
private:
intvalue;//数据成员
};
voidcoutner:
:
increment()//给value原值加1
{value=value+1;}
voidcoutner:
:
decrement()//给value原值减1
{value=value-1;}
intcoutner:
:
getvalue()//取得计数器值
{returnvalue;}
voidcoutner:
:
print()//显示计数
{cout<intmain(){
ints;
cin>>s;
coutnero1(s);//定义counter类的几个对象并调用有关成员函数
o1.increment();
o1.print();
coutnero2(s);//定义counter类的几个对象并调用有关成员函数
o2.decrement();
o2.print();
return0;
}
4.
定义一个类ClsName,要求该类设计如下:
(1)该类有两个整型数据成员x和y;
(2)为该类重载三个不同的构造函数:
分别为无参数、带一个参数和带两个参数的构造函数,要求在构造函数中输出必要的信息以示区别;
(3)设计2个成员函数用来读取数据成员x和y;
(4)设计2个成员函数用来设置数据成员x和y;
(5)设计1个成员函数用来在屏幕上打印输出数据成员x和y;
(6)在main()函数中用三个不同的构造函数创建3个对象,并使用所有的成员函数对这些对象进行必要的操作。
程序如下:
#include
usingnamespacestd;
classClsName{
private:
intx,y;
public:
ClsName(inta,intb)
{x=a;y=b;}
ClsName(intc)
{x=c;y=0;}
ClsName()
{x=1;y=1;}
intgetx()
{returnx;}
intgety()
{returny;}
voidprint();
};
voidClsName:
:
print()
{
cout<}
intmain()
{
ClsNameo1,o2(3),o3(4,5);
o1.print();
o2.print();
o3.print();
return0;
}
运行结果:
5.
建立类cylinder,包括两个数据成员radius和height,分别表示圆柱体的半径和高度,cylinder类的构造函数被传递了两个double值来初始化这两个成员;定义成员函数area()和volume用来求圆柱体的表面积和体积,定义成员函数print()打印cylinder类的相关信息。
最后,在主函数中对cylinder类的设计进行测试。
程序如下:
#include
usingnamespacestd;
classcylinder{
private:
doubleradius,height,a,v;
public:
cylinder(doublea,doubleb)
{radius=a;height=b;}
doublearea();
doublevolume();
voidprint(cylinder&t);
};
doublecylinder:
:
volume()
{
doublev;
v=height*radius*radius*3.14;
returnv;
}
doublecylinder:
:
area()
{
doublea;
a=2*radius*3.14*height;
returna;
}
voidcylinder:
:
print(cylinder&t)
{
cout<<"area="<}
intmain()
{
cylindero1(3,3);
o1.print(o1);
return0;
}
运行结果:
6.
定义一个学生类CStudent实现简单的学籍管理功能,要求该类至少实现以下功能:
(1)录入学生的基本信息(包括姓名,学号,性别,年龄,专业,入学时间,各门功课成绩)
(2)输出学生的基本信息
(3)选课(输入时间和所选的课程)
(4)统计每门课的学分绩点
(5)统计每学期的平均学分绩点
(6)统计重考科目
(7)统计重修科目
程序如下:
#include
#include
usingnamespacestd;
classCStudent{
public:
CStudent(stringn,stringnu,strings,inta,stringz,inty,intm,intd,intma,inte,intcyy)//构造函数
{
name=n;number=nu;sex=s;age=a;zy=z;year=y;month=m;day=d;math=ma;english=e;c=cyy;
}
voidprint()//打印出学生信息
{cout<<"姓名:
"<"<"<"<"<"<"<