问题 填空题

使用VC6打开考生文件夹下的工程test41_1,此工程包含一个源程序文件test41_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为:
7
源程序文件test41_1.cpp清单如下:
#include<iostream.h>
class myclass

int a, b;
public:
/***************** found *****************/
int sum(myclass x);
void set_ab(int i, int j);
:
/**************** found ****************/
void myclass:set_ab(int i, int j)

a=i;
b=j;

int sum (myclass x)

/***************** found ***************/
x.a+x.b;

void main ( )

myclass n;
n.set_ab (3, 4);
cout <<sum(n)<<endl;

答案

参考答案:
(1) 错误:int sum(myclass x);
正确:friend int sum(myclass x);
(2) 错误:void myclass:set_ab(int i,int j)
正确:void myclass::set_ab(int i,int j)
(3) 错误:x.a+x.b;
正确:return x.a+x.b;

解析:
(1)函数sum中含有对于myclass类的私有数据成员a和b的操作,而普通函数没有这样的权限,所以编译器会报错,只有把sum定义成该类的友元函数,这样根据友元函数可以访问该类的所有元素的规则,就可以正确地实现该函数:
(2)函数的参数列表只能用于类的构造函数,对于构造函数,参数列表与在函数体内赋值是等价的,但是一般的类的成员函数只能使用函数体内赋值一种方法;
(3)该函数的返回值为int型,所以计算之后的结果应该使用关键字return返回主函数,return返回值可以使用括号,也可以不使用,后面可以是表达式也可以是变量或者常量。

填空题
单项选择题