问答题
用VC++6.0打开考生文件夹下的源程序文件3.cpp,这个工程完成输出到屏幕一些特定的信息,但工程有错误或者不完整,请完成以下功能:
(1)初始化Num2的值为j,请在注释1后添加适当的语句。
(2)补充全局函数fun使之能够调用类TC的成员变量,请在注释2后添加适当的语句。
(3)初始化静态变量,请在注释3后添加适当的语句。
(4)修改注释4后的语句。使得程序输出以下内容:
Num1=7
Num2=12
Num3=-7
Num1=6
Num2=9
Num3=-17
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
试题程序:
#include
classTC
{
public:
//********1********
TC(inti,intj)
{
Num1=i:
Num3-=i:
}
voidPrint()
{
cout<<"Numl="< cout<<"Num2="< cout<<"Num3="< }
voidAdd(inti)
{
Num3-=i:
}
private:
intNuml;
constintNum2;
staticintNum3;
//********2********};
//********3********voidfun( )
{
TCobj(5,9);
obj.Numl=6;
//********4********obj.Add( );
obj.Print( );
}
voidmain( )
{
TCobj(7,12);
obj.Print( );
fun( );
return;
}
【正确答案】 (1)“TC(inti,intj)”应改为“TC(inti,intj):Num2(j)”。
(2)应添加“friendvoidfun();”。
(3)应添加“intTC::Num3=0;”。
(4)“obj.Add();”应改为“0bj.Add(5);”。
【答案解析】【解析】本题考查了构造函数初始化列表、声明友元函数、初始化静态成员变量。第1处应该添加初始化Num2成员的语句,由于该成员为常成员,所以只能通过初始化列表初始化。第2处应添加将fun函数声明为TC类友元的语句。静态成员变量需要在类外初始化,就像定义类的成员函数一样。可以将静态成员变量看成全局变量。Add函数需要一个int型参数,从Add函数的定义来看,它将增加形参i的值。由于main函数中先调用了一次Print成员函数,已经输出了3行数据,然后再调用fun函数的,所以fun函数中调用Print是输出后3行数据。Num3在第1次输出时值为10,fun函数中创建obj对象时,又让其增加1,而希望它最终的值是16,所以不难得知,Add()中应传入5才能达到目的。