问答题 使用VC6打开 下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:
number1=a
number2=a
number1=a
number2=b
注意:错误的语句在//******error******的下面,修改该语句即可。
#include<iostream.h>
class CMyClass
{
public:
//******error******
friend void SetValue(CMyClass obj,char c)
{
obj.number1=c;
obj.number2=c;
}
//******error******
void SetValue(CMyClass obj, char c1,char c2 )
{
obj.number1=c1;
obj.number2=c2;
}
void display()
{
cout < < "number1=" < < number1 < < endl;
cout < < "number2=" < < number2 < < endl;
}
private:
char number1,number2;
};
void main()
{
CMyClass t;
SetValue(t,"a");
t.display();
//******error******
t.SetValue(&t,"a","b");
t.display();
}
【正确答案】
【答案解析】(1)friend void SetValue (CMyClass& obj, char c)
(2)void SetValue(CMyClass& obj,char c1, char c2)
(3)t.SetValue(t,"a","b");
答案考生文件夹 [解析] 程序中定义了类CMyClass,含有两个成员变量char型变量number1和number2,友元SetValue()函数,成员函数SetValue()和display()函数,SetValue()函数可改变number1和number2的值,display()数在屏幕上打印number1和number2的值。
(1)根据程序的输出结果,函数SetValue(t,"a")执行后,输出number1和number2的值均为a,在SetValue(t,"a")执行中改变了对象t的成员number1和number2的值,故SetValue(t,"a")的第一个参数传递的是引用,因此第1个标识下应改为“friend void SetValue(CMyClass& obj,char c)”。
(2)主函数中t.SetValue(t,"a","b")后调用t的display()函数,在屏幕上打印,“number1=a number2=b”,可知在SetValue(CMyClass obj,char c1,char c2)中改变了对象t的成员number1和number2的值,因此第一个参数传递为引用方式,故第2个标识下应改为“void SetValue(CMyClass& obj,char c1,char c2)”。
(3)由2可知,第3个标识下是调用函数SetValue(CMyClass& obj,char c1,char c2)函数,函数的第一个参数为引用,直接使用变量名即可,因此第3标识下的引用使用错误,应改为“t.SetValue(t,"a","b");”。