实验5(1) 参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验5(1) 类的组合
参考答案
一、实验目的与实验要求
(1)理解类组合的概念与作用。
(2)掌握对象成员的定义方法,理解对象成员的构造与析构方法。
(3)理解组合后类的构造函数与析构函数的调用次序。
(4)掌握对象成员中私有成员和保护成员的访问方法。
二、实验内容
题目1:对象成员的定义、构造与访问。
定义三个类Member1、Member2和New。Member2中包含有Member1类型的成员,New中包含有Member1与Member2类型的成员。程序的具体要求如下。
①在Member1类中,它含有一个int型私有数据成员x以及三个公有成员函数。三个成员函数分别为构造函数、析构函数与显示函数show( )。show( )函数的作用是输出x的值。
②在Member2类中,它含有三个私有数据成员,分别是Member1型的对象obj1、obj2与int型的数据y。此外,它还含有三个公有成员函数,分别是构造函数、析构函数与显示函数show( )。show( )函数的作用是输出y的值。
③在New类中,它含有三个私有数据成员,分别是Member1型的对象m1、Member2型的对象m2与int型的数据z。此外,它还含有三个公有成员函数,分别是构造函数、析构函数与显示函数show( )。show( )函数的作用是输出z的值。
④main( )函数中定义一个New型的对象,并调用show( )函数。
程序为:
#include
using namespace std;
class Member1
{
public:
Member1(int a)
{
x = a;
cout << "constructing Member1 " << x << endl;
}
~Member1( )
{
cout << "donstructing Member1\n";
}
void show( )
{
cout << "Member1 x = " << x << endl;
}
private:
int x;
};
class Member2
{
public:
Member2( int a,int b,int c ):obj1(a),obj2(b)
{
y = c;
cout << "constructing Member2 " << y << endl;
}
~Member2( )
{
cout << "donstructing Member2\n";
}
void show( )
{
cout << "Member2 y = " << y << endl;
}
private:
Member1 obj1, obj2;
int y;
};
class New
{
public:
New( int a,int b,int c,int d,int e): m1(a),m2(b,c,d)
{
z = e;
cout << "constructing New " << z << endl;
}
~New( )
{
cout << "donstructing New\n";
}
void show( )
{
cout << "New z = " << z << endl;
}
private:
Member1 m1;
Member2 m2;
int z;
};
int main( )
{
New ex(1,2,3,4,5);
ex.show( );
return 0;
}
题目2:类组合的应用。
编写一个程序,对一批学生的资料进行处理。程序的具体要求如下。
①编写日期类Date,它含有三个私有int型数据成员year、month、day,分别表示年、月、日。此外,它还含有五个公有成员函数,分别是构造函数、显示函数Show( )、取值函数GetYear( )、GetMonth( )和GetDay( )。Show( )的功能是输出当前对象的日期,GetYear( )、GetMonth( )、GetDay( )的作用分别是返回year、month和day的值。
②编写学生类Student,它含有三个私有数据成员,分别是字符串型变量name、int型变量score与Date型变量birthday,分别表示学生的姓名、成绩与出生日期。此外,它还含有五个公有成员函数,分别是构造函数、显示函数Show( )、取值函数GetName( )、GetScore( )和GetDate( )。Show( )的功能是输出当前对象的所有信息,GetName( )、GetScore( )、GetDate( ) 的作用分别是返回name的首地址、score的值以及birthday的值。
③编写函数CompareDate。它的原型如下,它的作用是比较日期d1和d2的前后。如果d1在d2前,返回-1,如果d1在d2后,返回1,如果d1和d2是同一天,返回0。
int CompareDate( Date d1, Date d2 );
④编写函数SortByName。它的原型如下,它的作用是对st数组的前num个数据按姓名进行排序。
void SortByName( Student * st , int num );
⑤编写函数SortByScore。它的原型如下,它的作用是对st数组的前num个数据按成绩进行排序。
void SortByScore( Student *st , int num );
⑥编写函数SortByBirthday。它的原型如下,它的作用是对st数组的前num个数据按出生日期进行排序。
void SortByBirthday( Student * st, int num );
⑦编写函数PrintStudent。它的原型如下,它的作用是输出st数组的前num项。
void PrintStudent( Student *st , int num );
⑧编写主函数main( ),在main( )中定义对象数组st,并调用上述函数进行测试。st数组使用下列数据进行初始化。
Jack, 99, 1990, 2, 5
Mike, 62, 1989, 12, 25
Tom, 88, 1990, 3, 14
Kate, 74, 1989, 10, 15
Rowen, 92, 1990, 5, 22
程序如下:
#include
using namespace std;