问答题 请使用VC6或使用【答题】菜单打开 proj3下的工程proj3,其中使用友元函数访问类的私有数据成员,求出两个数据成员的大于1的最小公因子。请编写友员函数FriFun,使其输出结果为:
Common denominator is 2
要求:补充编制的内容写在“// *******333*******”与“// *******666*******”之间,不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。
//proj3.h
class FriFunClass
{
int a, b;
public:
FriFunClass (int i, int j) {a=i; b=j;}
friend int FriFun (FriFun-
Class x); //友元函数
};
void writeToFile (const char *);
//proj3.cpp
#include <iostream>
using namespace std;
#include "prj3.h"
int FriFun (FriFunClass x)
{
// *******333*******
//由于函数FriFun()是类FriFunClass的友元函数,所以它可以直接访问a和b
// *******666*******
}
int main()
{
FriFunClass n(10, 20);
if (FriFun(n))
cout << "Common denominator is" << FriFun(n) << "/n";
else cout << "No common denominator./n";
writeToFile(" ");
return 0;
}
【正确答案】
【答案解析】int min = x.a < x.b ? x.a : x.b; //此处为取出x.a与x.b中的最小值
for (int i = 2; i <= min; i++) //从i到min遍历数组
if (x.a% i == 0 && x.b% i == 0)
//如i能同时整除x.a来的x.b,则仅回i
return i;
return -1;
答案考生文件夹 [考点] 本题考查的是FriFunClass类,其中涉及构造函数和友元函数。题目要求完成友元函数,在函数体内可以任意调用FriFunClass类的私有成员。
[解析] 主要考查考生对友元函数的掌握情况,友元函数可以访问类的私有数据成员,题目要求函数求出两个数据成员的大于1的最小公因子,从2开始往上算,因此要同时可以被两个私有成员整除,这里用取余符号完成,取余为0即为整除。
主要考查考生对友元函数的掌握情况,友元函数可以访问类的私有数据成员。