40410126甘全中实验一Word文档下载推荐.docx
《40410126甘全中实验一Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《40410126甘全中实验一Word文档下载推荐.docx(14页珍藏版)》请在冰点文库上搜索。
classTime
{
private:
intyear;
intmonth;
intday;
public:
Time(inty,intm,intd):
year(y),month(m),day(d){}
voidDate_time();
};
voidTime:
:
Date_time()
if(this->
year%400==0||this->
year%4==0&
this->
year%100!
=0)
cout<
<
year<
"
"
month<
day<
:
该年是闰年"
endl;
else
cout<
该年不是闰年"
}
intmain()
Timet1(2016,3,31);
Timet2(2015,3,31);
Timet3(2012,3,31);
Timet4(2000,3,31);
t1.Date_time();
t2.Date_time();
t3.Date_time();
t4.Date_time();
return0;
(2)运行结果:
(alt+printscreen)
(3)运行结果分析:
定义一个Time的类,在类里定义私有的数据成员,在类里声明一个公用的成员函数作为对外的接口。
在类外定义成员函数,最后在main函数中声明并调用即可。
2.编制带有构造函数和析构函数的类以及用构造函数来初始化对象:
编写一个程序,定义一个日期时间类,并在类中定义构造函数、析构函数
(1)构造函数和析构函数都没有返回值
(2)构造函数可以有参数,析构函数则不可以有
(3)构造函数和析构函数都是系统自动调用的
intMonth;
inthour;
intminute;
intsex;
Time(inty,intM,intd,inth,intm,ints):
year(y),Month(M),day(d),hour(h),minute(m),sex(s){}
voiddisplay_time()
{
cout<
thisdateis:
Month<
hour<
minute<
sex<
}
~Time()
Destructorcalled."
}
Timet1(2016,3,31,22,37,30);
Timet2(2016,3,31,23,50,35);
Timet3(2016,3,31,00,40,50);
Timet4(2016,4,1,00,00,00);
t1.display_time();
cout<
t2.display_time();
t3.display_time();
t4.display_time();
(3)运行结果分析:
定义时间的一个类,在类里定义私有的有关时间的数据成员和对外的成员函数接口。
并用析构函数作清理工作。
3.输入下列程序
#include<
classCoordinate
{public:
Coordinate(intx1,inty1)
{x=x1;
y=y1;
Coordinate(Coordinate&
p);
~Coordinate()
{cout<
”Destructoriscalleded\n”;
intgetx()
{returnx;
intgety()
{returny;
intx,y;
Coordinate:
p)
{x=p.x;
y=p.y;
”copy-initializationConstructoriscalled\n”;
{Coordinatep1(3,4);
Coordinatep2(p1);
Coordinatep3=p2;
”p3=(“<
p3.getx()<
”,”<
p3.gety()<
”)\n”;
return(0);
(1)写出程序的运行结果。
(2)将Coordinate类中带有两个参数的构造函数进行修改,在函数体内增添下述语句:
”Constructoriscalled.\n”;
写出程序的运行结果,并解释输出结果。
在构造函数中添加了一个输出语句。
在定义类的对象时,自动调用构造函数,在main函数中只调用一次构造函数,故只有一个输出语句!
(3)按下列要求进行调试:
在主函数体内,添加下列语句:
Coordinatep4;
Coordinatep5
(2);
调试程序时会出现什么错误?
为什么?
如何对已有的构造函数进行适当修改?
在构造函数中没有设置默认值,因此它是不确定的。
可以用带参数的构造函数来解决!
(4)经过以上第
(2)步和第(3)步的修改后,结合运行结果分析。
创建不同的对象时会调用不同的构造函数!
运行结果分析:
本程序充分使用了类的用法。
如intgetx(),intgety().的使用。
并且用析构函数完成清理工作。
再则能定义多个构造函数,即函数的重载。
在调用时会根据具体的构造函数。
4.设计一个用来表示直角坐标系的Location类,在主程序中创建类Location的两个对象A和B,要求A的坐标点在第3象限,B的坐标在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离,要求按如下格式输出结果:
A(x1,y1),B(x2,y2)
Distance1=d1
Distance1=d2
其中:
x1、x2、y1、y2为指定的坐标值,d1和d2为两个坐标点之间的距离。
【提示】
类Location的参考框架如下:
classLocation{
public:
Location(double,double);
doubleGetx()
doubleGety()
doubledistance(Location&
);
frienddoubledistance1(Location&
Location&
private:
doublex,y;
math.h>
classLocation
doubleGetx();
doubleGety();
Location:
Location(doublex1,doubley1)
{
x=x1;
doubleLocation:
Getx()
returnx;
Gety()
returny;
distance(Location&
l1)
return(sqrt((x-l1.x)*(x-l1.x)+(y-l1.y)*(y-l1.y)));
doubledistance1(Location&
x1,Location&
x2)
return(sqrt((x1.x-x2.x)*(x1.x-x2.x)+(x1.y-x2.y)*(x1.y-x2.y)));
LocationA(-1,-2),B(-1,3);
A("
A.Getx()<
"
A.Gety()<
),"
B("
B.Getx()<
B.Gety()<
doubled1=A.distance(B);
doubled2=distance1(A,B);
Distanced1="
d1<
Distanced2="
d2<
分别按题意定义成员函数和友元函数,在成员函数中写出计算两点之间的距离,在主函数中定义并调用。
用友元函数时同理。
5.声明一个Student类,在该类中包括一个数据成员score(分数)、两个静态数据成员total_score(总分)和count(学生人数);
还包括一个成员函数account()用于设置分数、累计学生成绩之和、累计学生人数,一个静态成员函数sum()用于返回学生的成绩之和,另一个静态成员函数average()用于求全班成绩的平均值。
在main函数中,输入某班同学的成绩,并调用上述函数求出全班学生的成绩之和和平均分。
(1)源代码:
classStudent
floatscore;
staticfloattotal_score;
staticintcount;
voidaccount(floatscore)
{
total_score=total_score+score;
count++;
staticfloatsum()
{return(total_score);
staticfloataverage()
return(total_score/count);
intStudent:
count=0;
floatStudent:
total_score=0.0;
intmain()
{
Students1,s2,s3,s4,s5;
s1.account(99);
s2.account(70);
s3.account(85);
s4.account(89);
s5.account(91);
thesumis:
Student:
sum()<
theaverageis:
average()<
(2)运行结果:
按照题目的要求设计。
其中静态成员函数能直接访问静态数据成员。
在每个成员函数中完成各自的任务。
最后在主函数中定义变量并调用即可。
6.使用C++的string类,从键盘输入5个字符串,排序后按从小到大的顺序显示出来。
例如,输入的5个字符串是:
GermanyJapanAmericaBritainFrance,排序后从小到大的顺序输出字符串是:
AmericaBritainFranceGermanyJapan
string>
intmain()
inti;
stringstr[5];
voidsort(strings[]);
Pleaseinputstring:
for(i=0;
i<
5;
i++)
cin>
>
str[i];
sort(str);
Thesortedstringis:
str[i]<
}
voidsort(strings[])
inti,j;
stringtemp;
for(i=0;
4;
for(j=0;
j<
4-i;
j++)
if(s[j]>
s[j+1])
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
用string类,输入五个字符串。
通过比较大小来排序,运用冒泡法的排序将五个字符串从小到大的顺序输出。
三、结论
1.学习C++的重要思想,面向对象的设计。
用class类实现对对象的操作,学会使用类和对象。
2.认识友元函数的用法,友元函数可以访问本类中的数据成员。
3.关于静态数据成员和静态成员函数,静态成员函数能访问静态数据成员
说明:
1.电子实验报告填写好后,以学生的学号+实验项目名作为该word文件名保存,例如某学生学号为20150001,姓名为某某,本次实验是实验一,则本次实验报告的保存文件名为:
01某某实验一.doc。
2.在规定的时间内,学生将本报告提交给实验指导教师。