C++实验报告

  • 格式:doc
  • 大小:122.50 KB
  • 文档页数:9

实验一

一.题目

编写一个时间类,实现时间的自增、自减、读和输出。

二.编程思想

定义两个私有数据成员minute和 second,在自增运算中重载运算符++,使得若时间大于60秒是minute自增1,second为(秒数-60),在这里我定义的全部是后置运算,重载运算符——也是一样。在主函数中定义了4个Time类的对象,通过调用display()函数分别显示自增自减前和后的时间数。

三.源程序

#include

#include

using namespace std;

class Time

{public:

Time(){minute=0;second=0;}//默认构造函数

Time(int m,int s):minute(m),second(s){}//构造 重载函数 ,用参数的初始化表对数据成员初始化

Time operator++(int);//声明后自增运算符"++" 重载函数

Time operator--(int);//声明后置自减运算符“--”重载函数 void display(){cout<

private:

int minute;

int second;

};

Time Time::operator++(int)//定义后置运算符“++”重载函数

{Time temp(*this);

second++;

if(second>=60)

{second-=60;

++minute;}

return temp;//返回的是自加前的对象

}

Time Time::operator--(int)//定义后置运算符“--”重载函数

{Time temp(*this);

second--;

if(second<=0)

{second+=60;

--minute;

}

return temp;//返回的是自减前的对象

} int main()

{

Time time1(34,59),time2(23,00),time3,time4;

cout<<"time1:";

time1.display();

cout<<"time3=time++"<

time3=time1++;

cout<<"time3:";

time3.display();

cout<<"time1:";

time1.display();

cout<<"-------------------------"<

cout<<"time2:";

time2.display();

cout<<"time4=time--"<

time4=time2--;

cout<<"time4:";

time4.display();

cout<<"time2:";

time2.display();

system("pause");

} 四.运行结果

五.问题及解决

此次实验主要是练习如何对++和--运算符进行重载,在编程过程中由于对于时间的计算运用不是很熟练导致在重载函数时输出结果不正确,经过多次修改后得出正确运行结果。本次实验较为简单,在编程过程中未遇到较为棘手的问题。

实验二

一.题目

定义描述平面任意点坐标(X,Y)的类Point,编写一运算符重载函数,使该函数能求出平面上任意两点的距离。在主函数中完成下列运算:

Point p1(1,1), p2(4,5);

double d = p1-p2;

二.编程思想

在point类中声明两个私有成员x和y,在类内定义构造函数,并在构造函数中声明运算符“-”的重载函数,然后定义运算符重载函数,用this指针指向当前值,定义一求距离的的友元函数d(),使得其能够访问point类中的私有成员,并返回两点距离值。在主函数中通过两种方法计算平面两点的举例,一是通过运算符重载,二是通过函数调用,两者结果相同。

三.源程序

#include

#include

#include

using namespace std;

class point

{

private:

double x,y;//私有成员函数

public:

point(double a,double b)

{

x=a;y=b;

cout<<"点:("<

double operator-(point p); }

double point::operator-(point p)

{

return

sqrt((this->x-p.x)*(this->x-p.x)+(this->y-p.y)*(this->y-p.y));

}

friend double d(point &a,point &b)//

{

return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));

}

};

int main()

{

point p1(1,1),p2(4,5);

cout << "距离为:" << p1 - p2 << endl;

cout<<"两点间距离:"<

system("pause");

return 0;

}

四.运行结果

五.问题及解决

在本次实验中,对运算符重载的认识有进一步加深,在最初的编程过程中不知道怎样才能将计算距离的算法进行运算符重载,通过多次的尝试和学习才得知对运算符的重载其实就是在原来运算符的基础上在多加一些功能,在重载函数中将其功能实现即可。

实验三

一.题目

定义学生成绩类Score,其私有数据成员有学号、姓名、物理、数学、外语、平均成绩。再定义一个能计算学生平均成绩的普通函数Average(),并将该普通函数定义为Score类的友元函数。在主函数中定义学生成绩对象,通过构造函数输入除平时成绩外的其他信息,然后调用Average()函数计算平均成绩,并输出学生成绩的所有信息。

二.编程思想

在Score类的公有部分声明友元函数Average(),在类外定义构造函数,将各个数据成员初始化,并对某一学生的各信息进行输出;在类外定义一求平均成绩的函数,用于求该生各门课程的平均成绩,在主函数中声明Score的对象s并对各项进行赋初值,通过调用Average()输出平均成绩。

三.源程序

#include

#include

using namespace std;

class Score

{

public:

friend double Average(Score *s);

Score(char *number,char *name,double physicsScore, double

mathScore,double englishScore,double other);

private:

char m_number[100];

char m_name[100];

double m_physicsScore;

double m_mathScore;

double m_englishScore;

double m_other; };

Score::Score(char *number,char *name,double physicsScore, double

mathScore,double englishScore,double other)

{

strcpy(m_number,number);

strcpy(m_name,name);

m_physicsScore=physicsScore;

m_mathScore=mathScore;

m_englishScore=englishScore;

m_other=other;

cout<<"学号:"<

cout<<"姓名:"<

cout<<"物理:"<

cout<<"数学:"<

cout<<"英语:"<

cout<<"其他:"<

}

double Average(Score *s)

{

return

(s->m_physicsScore+s->m_mathScore+s->m_englishScore+s->m_other)/4;

}

int main()

{

Score s("1239902983","陈晨",80,85,90,88);

cout<<"平均成绩:"<

system("pause");

return 0;

}

四.运行结果

五.问题及解决

本次实验较为困惑的地方是在对Average()函数的调用上,因