使用VC6打开考生文件夹下的工程test14_1,此工程包含一个源程序文件test14_1.cpp,但该程序运行有

题目

使用VC6打开考生文件夹下的工程test14_1,此工程包含一个源程序文件test14_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:

member1=5member2=5

member1=7member2=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');

}

参考答案和解析
正确答案:(1)错误:friend void setMember(MyClass myObjchar mem1) 正确:friend void set Member(MyClass & myObjchar mem1) (2)错误:void setMember(MyClass & myObjchar mem1char mem2) 正确:friend void setMembe (MyClass & myObjchar mem1char mem2) (3)错误:theObj.setMember(theObj'5'); theObj.setMember(theObj'7''9'); 正确:setMember(theOebj'5'); setMember(theObj'7''9');
(1)错误:friend void setMember(MyClass myObj,char mem1) 正确:friend void set Member(MyClass & myObj,char mem1) (2)错误:void setMember(MyClass & myObj,char mem1,char mem2) 正确:friend void setMembe (MyClass & myObj,char mem1,char mem2) (3)错误:theObj.setMember(theObj,'5'); theObj.setMember(theObj,'7','9'); 正确:setMember(theOebj,'5'); setMember(theObj,'7','9'); 解析:(1)主要考查考生对于友元函数定义的掌握,应该使用引用调用才能改变该对象的成员值;
(2)主要考查考生对于友元函数重载的掌握,因为前面已经有了同名函数,很明显这个函数也应该为友元函数,所以关键字friend声明;
(3)主要考查考生是否会使用友元函数,调用友元函数和普通函数的方法一样,不需要使用对象访问。
更多“使用VC6打开考生文件夹下的工程test14_1,此工程包含一个源程序文件test14_1.cpp,但该程序运行有 ”相关问题