};
Member1 obj1, obj2; int y;
class New { public: }; int main( ) { }
New ex( (5) ); ex.show( ); return 0;
New( (3) ): (4) { } ~New( ) { }
void show( ) { }
Member1 m1; Member2 m2; int z;
cout << \cout << \z = e;
cout << \
private:
② 观察程序的运行结果,分析构造函数与析构函数的调用次序。 答:运行结果如下: constructing Member1 1 constructing Member1 2 constructing Member1 3 constructing Member2 4 constructing New 5 New z = 5
donstructing New
donstructing Member2 donstructing Member1 donstructing Member1 donstructing Member1 Press any key to continue
构造函数的调用次序是:
首先调用对象成员的构造函数,多个对象成员时按定义顺序执行其对应的构造函数;然后调用对象自身的构造函数。析构时其调用顺序与构造函数顺序相反。
New ex(1,2,3,4,5);时,构造函数的调用调用顺序为: m1的构造函数Member1 1
m2的构造函数,首先调用obj1的构造函数Member1 1,然后调用obj2的构造函数Member1,最后调用m2 自己的构造函数Member2
调用ex自身的构造函数 New 析构函数调用的过程相反。
③ 改变Member2构造函数初始化表中各项的次序,并再次运行程序,观察结果并分析构造函数与析构函数的调用次序。
答:因为构造函数的调用与初始化表中各项的次序无关,如果参数对应的对象成员不变,结果也不变。
④ 在Member2构造函数中添加语句obj1.x = 50是否可行?分析其原因。 答:不可行。 原因:
输出窗口区显示:error C2248: 'x' : cannot access private member declared in class 'Member1'
因为x在Member1 中是私有成员,在Member2类中不能直接访问Member1中的私有成员。
⑤ 在main( )中添加下列语句是否可行?分析其原因。 ex.m1.show( ); ex.m2.show( ); 答:不可行。 原因:
输出窗口显示:'m1' : cannot access private member declared in class 'New' 'm2' : cannot access private member declared in class 'New'
m1,m2在New类中属于私有的对象成员,在类外的main函数中不可直接访问。 ⑥ 在Member2与New中的show( )函数添加语句,使得main( )中ex.show( );能输出所有x、y和z的值。
答:Member2中的show( )函数修改为如下: void show( ) { cout<<\ obj1.show(); cout<<\ obj2.show(); cout << \ }
New中的show( )函数修改为如下: void show( ) { cout<<\ \
cout<<\ \ cout << \ } 运行结果为:
constructing Member1 1 constructing Member1 2 constructing Member1 3 constructing Member2 4 constructing New 5 m1. Member1 x = 1 m2.
obj1. Member1 x = 2 obj2. Member1 x = 3 Member2 y = 4 New z = 5
donstructing New
donstructing Member2 donstructing Member1 donstructing Member1 donstructing Member1 Press any key to continue 题目2指导:
① Date类、Student类与main( )的主要代码如下,在横线上补充相应的语句。
class Date { public:
Date( int y = 2000 , int m = 1 , int d = 1 ) { }
void Show( ) { }
int GetYear( ) { }
int GetMonth( ) { }
return month; return year;
cout << year << \year = y; month = m; day = d;
};
int GetDay( ) { } int year; int month; int day;
return day;
private:
class Student { public: }; int main( ) {
Student st[5] = { (5) }; PrintStudent( (6) ); SortByName( (7) );
Student( (1) ): (2) { }
void Show( ) { }
char * GetName( ) { }
int GetScore( ) { }
Date GetDate( ) { }
char name[20]; int score; Date birthday;
return (4) ; return score; return name;
cout << name << \ (3) ; strcpy( name, p ); score = s;
private:
}
PrintStudent( (8) ); SortByScore( (9) );
PrintStudent( (10) ); SortByBirthday( (11) ); PrintStudent( (12) ); return 0;
② 声明、实现下列函数,并运行程序进行测试。
int CompareDate( Date d1, Date d2 ); void SortByName( Student *, int num ); void SortByScore( Student *, int num ); void SortByBirthday( Student *, int num ); void PrintStudent( Student *, int num );
四、实验预习
(1)阅读主教材第5章全部内容,理解教材中的示例程序。 (2)阅读本次实验内容及对应的实验指导,提前编写源程序。
相关推荐: