问题 填空题

使用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返回值可以使用括号,也可以不使用,后面可以是表达式也可以是变量或者常量。

判断题
问答题 简答题