实验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
public: Member1(int a) { x = a; cout << \ } ~Member1( ) { cout << \ } void show( ) { cout << \
} private: int x; };
class Member2 {
public: Member2( int a,int b,int c ):obj1(a),obj2(b) { y = c; cout << \ } ~Member2( ) { cout << \ } void show( ) { cout << \ } 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 << \ } ~New( ) { cout << \ } void show( ) { cout << \ } 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
class Date {
public: Date( int y = 2000 , int m = 1 , int d = 1 ) { year = y; month = m; day = d; } void Show( ) { cout << year << \ } int GetYear( ) { return year; } int GetMonth( ) { return month; } int GetDay( ) { return day; } private: int year; int month; int day; };
class Student {
public: Student( int y=0,int m=0,int d=0,int s=0,char *p=\ \ { strcpy( name, p ); score = s; } void Show( ) { cout << name << \ birthday.Show(); }
相关推荐: