问答题 使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能: (1)完成CMyClass的构造函数,请改正注释//********1********后的错误。 (2)完成fun()函数定义,请改正注释//********2********后的错误。 (3)初始化CmyClass的成员变量Number3为4,请改正注释//********3********后的错误。 (4)完成func()函数,请改正注释//********4********后的错误。 输出的结果为: Number1=12 Number2=18Number3=16 Number1=4 Number2=2 Number3=19 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include<iostream.h>class CMyClass{public: //********1******** CMyClass(int i,int j) { Number1=i; Number3+=i; } void display() { cout<<"Number1="<<Number1<<end1; cout<<"Number2="<<Number2<<end1; cout<<"Number3="<<Number3<<end1; } void AddNum(int i) { Number3+=i; }private: int Number1; const int Number2; static int Number3; //********2******** }; //********3******** void func() { CMyClass obj(1,2); obj.Number1=4; //********4******** obj.AddNum(); obj.display(); } void main() { CMyClass myObj(12,18); myObj.display(); func(); return;}
【正确答案】正确答案:(1)将“CMyClass(int i,int j)”补充完整为:CMyClass(int i,int j):Number2(j) (2)添加语句:friend void func(); (3)添加语句:int CMyClass::Number3=4; (4)将“obj.AddNum()”补充完整为:obj.AddNum(2);
【答案解析】解析:(1)第1个标识下完成类的构造函数初始化类的成员变量,常成员也必须初始化,并且不能被更新,常数据成员的初始化只能通过构造函数的成员初始化类表进行,因此第1个标识下应为“CMyClass(int i,int j):Number2(j)”,i用来初始化Number1和Number3,j初始化Number2。 (2)第2个标识下完成funcO的函数定义,由审题分析可知,函数func()为类的友元,故第2个标识下应为“friend void func();”。 (3)第3个标识下是静态成员的初始化,静态数据成员的初始化格式为:<数据类型><类名>::<静态数据成员>=<初始值>,因此第3个标识下应为“int CMyClass::Number3=4;”。 (4)成员函数AddNum()带有一个整型参数,因此调用此函数时必须有参数传入,可由程序运行结果分析得知传入的参数值的大小。在fun()函数内,定义CMyClass obj(1,2)后,obj.Number1=1,obj.Number2=2,Number3=16+1=17,obj.Number1=4,Number1为4,obj.Number2为常成员其值不会改变,调用AddNum()函数后调用显示函数显示成员变量值,可知Number3为19,因此AddNum()的参数为19-17=2,即第4个标识下应为“obj.AddNum(2);”。