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