使用VC6打开考生文件夹下的工程test14_1,此工程包含一个源程序文件test14_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:
member1=5 member2=5
member1=7 member2=9
源程序文件test14_1.cpp清单如下:
#include<iostream.h>
class My Class
/************** found *****************
friend void setMember(MyClass myObj,char meml)
myObj.member1=mem1;
myObj.member2=mem1;
cout<<"member1="<<myObi.member1<<" member2="<<myObj.member2<<endl;
/************** found ***************/
void setMember(MyClass& myObj,char mem1,char mem2)
myObj.member1=mem1;
myObj.member2=mem2;
cout<<"member1:"<<myObj.member1<<"member2="<<myObj.member2<<endl;
private:
char member1;
char member2;
;
void main()
MyClass theObj;
/************** found ****************/
theObj.setMember(theObj,’5’);
theObj.setMember(theObj,’7’,’9’);
参考答案:
(A)错误:friend void setMember(MyClass myObj,char memA)
正确:friend void set Member(MyClass& myObj,char memA)
(B)错误:void setMember(MyClass & myObj,char memA,char memB)
正确:friend void setMembe (MyClass& myObj,char memA,char memB)
(C)错误:theObj.setMember(theObj,’E’);
theObj.setMember(theObj,’G’,’I’);
正确:setMember(theOebj,’E’);
setMember(theObj,’G’,’I’);
解析:
(1)主要考查考生对于友元函数定义的掌握,应该使用引用调用才能改变该对象的成员值;
(2)主要考查考生对于友元函数重载的掌握,因为前面已经有了同名函数,很明显这个函数也应该为友元函数,所以关键字friend声明;
(3)主要考查考生是否会使用友元函数,调用友元函数和普通函数的方法一样,不需要使用对象访问。