南京邮电大学C++实验报告一

实验一: 类和对象的定义及使用

实验题目1定义一个时间类Time,有三个私有成员变量HourMinuteSecond,定义构造函数、析构函数以及用于改变、获取、输出时间信息的公有函数,主函数中定义时间对象,并通过调用各种成员函数完成时间的设定、改变、获取、输出等功能。

按要求完成类的定义与实现。

修改数据成员的访问方式,观察编译结果。

Time类中定义一个成员函数,用于实现时间增加一秒的功能,主函数中通过对象调用该函数,并输出增加一秒后的时间信息。

定义一个普通函数。

void f(Time  t)

{    t. PrintTime( );

}

Time类中增加拷贝构造函数的定义,主函数中调用该函数,运用调试工具跟踪,分析整个程序调用构造函数(包括拷贝构造函数)和析构函数的次数;再将f函数的形式参数分别修改为引用参数和指针参数(此时函数代码修改为{t-> PrintTime( );},主函数中调用,再分析此时调用构造函数和析构函数的次数。

# include <iostream>
using namespace std;
class Time 
{
private :
	int Hour;
	int Minute;
	int Second;
public:
	Time (int h ,int m=0,int s=0)
	{
		cout<<"Executing constructor...\n";
		Hour=h;
		Minute=m;
		Second=s;
	}
	Time (const Time &t)
	{
		Hour=t.Hour;
		Minute=t.Minute;
		Second=t.Second;
		cout<<"Copy constructing..."<<endl;
	}
	void ChangeTime(int h,int m, int s)
	{
		Hour=h;
		Minute=m;
		Second=s;
	}
	void PrintTime ()
	{
		cout<<Hour<<":"<<Minute<<":"<<Second<<endl;
	}
	int Gethour()
	{
		return Hour;
	}
	int Getminute()
	{
		return Minute;
	}
	int Getsecond()
	{
		return Second;
	}
	~Time ()
	{
		cout<<"Destructor called.\n";
	}
};
void f(Time  t)
{
	t. PrintTime( );
	cout<<"call f\n";
}
int main()
{
	Time Now (8,9,7);
	Now.PrintTime();
	Now.ChangeTime(5,8,20);
	Now.PrintTime();
	Now.PrintTime();
	Time time1(2,26,49);
	time1.PrintTime();
	Time time2(time1);
	time2.PrintTime();
	Time time3(23,59,59);
	time3.PrintTime();
	f(time2);
	return 0;
}

③取消类中成员函数IncreaceOneSecond( )的注释标志,将该函数补充完整,注意时间在增加一秒情况下的进位关系。

该函数的代码如下:

# include <iostream>
using namespace std;
class Time 
{
private :
	int Hour;
	int Minute;
	int Second;
public:
	Time (int h, int m , int s)
	{
		cout<<"Executing constructor...\n";
		Hour=h;
		Minute=m;
		Second=s;
	}
	Time (const Time &t)
	{
		Hour=t.Hour;
		Minute=t.Minute;
		Second=t.Second;
		cout<<"Copy constructing..."<<endl;
	}
	void ChangeTime(int h, int m, int s)
	{
		Hour=h;
		Minute=m;
		Second=s;
	}
	void PrintTime ()
	{
		cout<<Hour<<":"<<Minute<<":"<<Second<<endl;
	}
	int Gethour()
	{
		return Hour;
	}
	int Getminute()
	{
		return Minute;
	}
	int Getsecond()
	{
		return Second;
	}
	void IncreaceOneSecond ()
	{
		Second+=1;
		while(Second>=60)
		{
			Minute++;
			Second-=60;
		}
		while(Minute>=60)
		{
			Hour++;
			Minute-=60;
		}
		while(Hour>=24)
		{
			Hour-=24;
		}
	}
	~Time ()
	{
		cout<<"Destructor called.\n";
	}
};
void f(Time  t)
{
	t. PrintTime( );
	cout<<"call f\n";
}
int main()
{
	Time Now (8,9,7);
	Now.PrintTime();
	Now.IncreaceOneSecond();
	Now.PrintTime();
	Now.ChangeTime(5,8,20);
	Now.PrintTime();
	Now.IncreaceOneSecond();
	Now.PrintTime();
	Time time1(2,26,49);
	time1.PrintTime();
	time1.IncreaceOneSecond();
	time1.PrintTime();
	Time time2(time1);
	time2.IncreaceOneSecond();
	time2.PrintTime();
	Time time3(23,59,59);
	time3.IncreaceOneSecond();
	time3.PrintTime();
	f(time2);
	return 0;
}

实验题目2 定义一个Girl类和一个Boy类,这两个类中都有表示姓名、年龄的私有成员变量,都要定义构造函数、析构函数、输出成员变量信息的公有成员函数。

根据要求定义相应的类。

Girl类作为Boy类的友元类,在Girl类的成员函数VisitBoy(Boy & )中访问Boy类的私有成员,观察程序运行结果。

Boy类的某成员函数VisitGirl(Girl & )中试图访问Girl类的私有成员,观察编译器给出的错误信息,理解原因。

主函数中正确定义两个类的对象,调用各自的成员函数实现相应功能。

再将Boy类作为Girl类的友元类,在Boy类的某成员函数VisitGirl(Girl & )中访问Girl类的私有成员,观察编译器给出的信息。

删除两个类中的函数VisitGirl(Girl & ) VisitBoy(Boy & ),定义一个顶层函数VisitBoyGirl(Boy &, Girl &),作为以上两个类的友元,通过调用该函数输出男孩和女孩的信息。

实验解答:

①定义相应的类,主函数中定义相应的类成员,调用各类的输出函数显示信息。

源程序代码如下:

# include<iostream>
using namespace std;
class Boy;
class Girl
{
	char name [25];
	int age;
public:
	Girl(char N[], int A);
	~Girl()
	{
		cout<<"Girl destructing...\n";
	}
	void Print();
	void VisitBoy(Boy & boy);
};
class Boy
{
	char name [25];
	int age;
	friend Girl;
public:
	Boy(char N[],int A);
	~Boy()
	{
		cout<<"Boy destructing...\n";
	}
	void Print();
	void VisitGirl(Girl &);
};
Girl::Girl(char N[],int A)
{
	strcpy(name,N);
	age=A;
	cout<<"Girl constructing...\n";
}
void Girl::Print()
{
	cout<<"Girl's name:   "<<name<<endl;
	cout<<"Girl's age:   "<<age<<endl;
}
void Girl::VisitBoy(Boy & boy)
{
	cout<<"Boy's name:   "<<name<<endl;
	cout<<"Boy's age:   "<<age<<endl;
}
Boy::Boy(char N[],int A)
{
	strcpy(name,N);
	age=A;
	cout<<"Girl constructing...\n";
}
void Boy::Print()
{
	cout<<"Boy's name:   "<<name<<endl;
	cout<<"Boy's age:   "<<age<<endl;
}
void Boy::VisitGirl(Girl & girl)
{
	cout<<"Girl's name:   "<<name<<endl;
	cout<<"Girl's age:   "<<age<<endl;
}
int main()
{
	Girl girl1("chen",18);
	girl1.Print();
	Girl girl2("xi",19);
	girl2.Print();
	Boy boy1("cheng",20);
	boy1.Print();
	Boy boy2("zhang",16);
	boy2.Print();
	return 0;
}
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cookie爱吃小饼干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值