1、国家二级(C+)机试-试卷 37 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。(分数:2.00)A.一对一B.一对多C.多对一D.多对多2.关于运算符重载,下列表述中正确的是( )。(分数:2.00)A.C+已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型D.可以通过运算符重载来创建 C+中原来没有的运算符3.有如下程序: #include using namespace std; class B public:
2、 virtual void show() coutshow(); void fun2(B void fun3(B b) b.show(); int main() B b,*p=new D; D d; fun1(p); fun2(b); fun3(d); delete p; return 0; 执行这个程序的输出结果是( )。(分数:2.00)A.BBBB.BBDC.DBBD.DBD4.下列选项中属于面向对象设计方法主要特征的是( )。(分数:2.00)A.继承B.自顶向下C.模块化D.逐步求精5.建立一个类对象时,系统自动调用(分数:2.00)A.析构函数B.构造函数C.静态函数D.友元函数6
3、.有如下模板声明: template class A; 下列声明中,与上述声明不等价的是(分数:2.00)A.templateclassA;B.templateclassA;C.templateclassA;D.templateclassA;7.下列选项中,正确的 C+表达式是(分数:2.00)A.a1+B.b+2C.3=cD.d-=48.下列关键字中,用来表示继承方式的是(分数:2.00)A.staticB.constC.virtualD.protected9.程序流程图中带有箭头的线段表示的是( )。(分数:2.00)A.图元关系B.数据流C.控制流D.调用关系10.已知有数组定义 cha
4、r a34;下列表达式中正确的是(分数:2.00)A.a0=“AAA“B.strcpy(a1,“BBBBB“)C.a21=“CC“D.a11=a1111.下列关于派生类构造函数和析构函数的表述中,错误的是(分数:2.00)A.下列关于派生类构造函数和析构函数的表述中,错误的是B.派生类的构造函数会隐含调用基类的构造函数C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数12.下面不能作为软件设计工具的是(分数:2.00)A.PAD 图B.程序流程图C.数据流程图(DFD 图)D.总体结构图13.下列选项中,不是
5、重载函数调用时选择依据的是(分数:2.00)A.参数个数B.参数类型C.参数名称D.函数名称14.有如下类声明: class Pam int k; public: Pam(int n):k(n) void show()const; ;若要在类体外给出成员函数 show 的定义,下列定义中正确的是(分数:2.00)A.voidshow()constcoutshow(); void fun2(B void fun3(B b) b.show(); int main() B b,*p=new D; D d; fun1(p); fun2(b); fun3(d); delete p; return 0;
6、执行这个程序的输出结果是( )。(分数:2.00)A.BBBB.BBDC.DBB D.DBD解析:解析:在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,本题中定义类B 的对象 b、对象指针*p=newD 以及类 D 的对象 d;执行 fun1 会调用派生类的 show 函数,因为 show 函数为虚函数,而调用 fun2、fun3 仍然为基类的 show 函数,所以本题答案为 C。4.下列选项中属于面向对象设计方法主要特征的是( )。(分数:2.00)A.继承 B.自顶向下C.模块化D.逐步求精解析:解析:面向对象基本方法的基本概念有对象、类和实例、消息、继承与多
7、态性,所以选择 A)。5.建立一个类对象时,系统自动调用(分数:2.00)A.析构函数B.构造函数 C.静态函数D.友元函数解析:解析:本题考查默认构造函数,如果用户定义的类中没有显式的定义任何构造函数,编译器就会自动为该类型生成默认构造函数,建立一个对象时,系统会自动执行默认构造函数。6.有如下模板声明: template class A; 下列声明中,与上述声明不等价的是(分数:2.00)A.templateclassA;B.templateclassA;C.templateclassA;D.templateclassA; 解析:解析:本题考查模板的定义,A、B、C 选项中两个参数都为 t
8、ypename 或 class,而 D 选项中第二个参数不是 typename 或 class,所以与题目中不等价,D 选项错误。7.下列选项中,正确的 C+表达式是(分数:2.00)A.a1+B.b+2C.3=cD.d-=4 解析:解析:本题考查 C+基本的表达式用法,属于基本知识,可以看出只有 D 选项正确。8.下列关键字中,用来表示继承方式的是(分数:2.00)A.staticB.constC.virtualD.protected 解析:解析:本题考查继承使用的关键字,属于基础知识,使用 D 选项为继承使用的关键字。9.程序流程图中带有箭头的线段表示的是( )。(分数:2.00)A.图元
9、关系B.数据流C.控制流 D.调用关系解析:解析:在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择 C)。10.已知有数组定义 char a34;下列表达式中正确的是(分数:2.00)A.a0=“AAA“B.strcpy(a1,“BBBBB“)C.a21=“CC“D.a11=a11 解析:解析:程序定义一个 3 行 4 列的二维字符数组。由于是二维数组,所以 a0代表一维数组,数组是不能直接赋值的,A 错误;由于是二维数组,a1代表数组 a 的第二行行地址,可以使用 strcpy 函数赋值,但是 a1只有 4 个字节大小的空间,而字符串“BBBBB
10、“占 6 个字节,拷贝越界,B 错误;同 B 情况一样,a21只有 1 个字节空间,“CC“占 3 个字节,无法完成赋值,C 错误;D 选项是对 a11完成自我赋值,正确;答案为 D。11.下列关于派生类构造函数和析构函数的表述中,错误的是(分数:2.00)A.下列关于派生类构造函数和析构函数的表述中,错误的是B.派生类的构造函数会隐含调用基类的构造函数C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 解析:解析:派生类对象的撤销顺序与构造顺序相反:首先运行派生类析构函数,然后按继承层次依次向上调用各基类析
11、构函数,这样做是为了每次析构函数销毁的都是完整的对象,选项 D 错误,答案为 D。12.下面不能作为软件设计工具的是(分数:2.00)A.PAD 图B.程序流程图C.数据流程图(DFD 图) D.总体结构图解析:解析:软件设计常用的工具有:图形工具:程序流程图、N-S 图、PAD 图、HIPO;表格工具:判定表;语言工具:PDL(伪码)。另外,在结构化设计方法中,常用的结构设计工具是结构图,故选择 C 选项。13.下列选项中,不是重载函数调用时选择依据的是(分数:2.00)A.参数个数B.参数类型C.参数名称 D.函数名称解析:解析:重载函数调用时首先要从函数名称相同的候选函数中选择可行函数,
12、可行函数必须满足两个条件:1、函数的形参个数与该调用的实参个数相同;2、每个实参的类型必须与对应形参的类型匹配,或者可被隐式转换为对应的形参类型。参数名称可以不相同,答案选 C。14.有如下类声明: class Pam int k; public: Pam(int n):k(n) void show()const; ;若要在类体外给出成员函数 show 的定义,下列定义中正确的是(分数:2.00)A.voidshow()constcoutk;B.voidshow()constcoutPam:k;C.voidPam:show()constcoutk; D.voidPam:show()constc
13、outk;解析:解析:在类定义体外定义成员函数,必须指定成员函数的作用域,因此需要在使用类名和作用域运算符来修饰函数名,答案为 C。15.下面对类-对象主要特征描述正确的是(分数:2.00)A.对象唯一性 B.对象无关性C.类的单一性D.类的依赖性解析:解析:对象的基本特点是:标识唯一性、分类性、多态性、封装性、模块独立性好。类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反映属于该对象类型的所有对象的性质。对象具有的性质,类也具有。故 A 选项正确。16.设 c1 和 c2 是类 MyClass 的对象,若将后缀运算符“+“作为类 MyClass 的友元函数重载,运算符“*“作
14、为类 MyClass 的成员函数重载,则表达式 c2*c1+等价于(分数:2.00)A.c1.operaor+(0).operator*(c2)B.c2.operator*(c1.operator+(0)C.c2.operator*(operator+(c1,0) D.operator*(operator+(c1,0),c2)解析:解析:友元函数不是类的成员函数,所以友元函数的调用不需要使用类对象;另外运算符重载不改变运算符的优先级,所以表达式 c2*c1+先执行 c1+;为了区分运算符的前缀和后缀形式,规定后缀式运算符函数接受一个额外的 int 型形参,使用时可以提供 0 作为形参的实参,所
15、以 c1+相当于operator+(c1,0),c2*c1+相当于 c2.operator*(operator+(c1,0);答案为 C。17.下列关于输入流类成员函数 getline()的表述中,错误的是(分数:2.00)A.该函数只能用来从键盘设备读取一行字符串 B.该函数读取的字符串长度是由参数限制的C.该函数读取字符串时,遇到终止符便停止D.该函数读取字符串时,遇到终止符便停止解析:解析:getline(istream public: How(int n):k(n) How(How 则类 How 所拥有的构造函数的数量是(分数:2.00)A.2 B.3C.4D.5解析:解析:C+中,一
16、个类若定义了构造函数,编译器就不会再生成默认构造函数,若定义了复制构造函数,编译器也不会再生成复制构造函数,所以类 How 拥有两个构造函数,答案为 A。20.数据库应用系统中的核心问题是( )。(分数:2.00)A.数据库设计 B.数据库系统设计C.数据库维护D.数据库管理员培训解析:解析:数据库应用系统中的核心问题是数据库的设计。21.下列关于类定义的说法中,正确的是( )。(分数:2.00)A.类定义中包括数据成员和函数成员的声明 B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义解析:解析:类的成员的缺省访问权限是私有的,数据成员可以是私有,
17、可以是公用的,也可以是受保护的。类的成员函数可以在类内定义。22.下列语句都是程序运行时的第 1 条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是( )。(分数:2.00)A.coutinternal12345;B.coutleft12345;C.coutright12345;D.coutsetw(6)12345; 解析:解析:本题考查控制输出格式,A、B、C 选项都会输出“12345“,只有 D 选项输出“12345“,所以本题答案为 D。23.下列关于内联函数的叙述中,正确的是(分数:2.00)A.内联函数就是在一个函数体内定义的函数B.内联函数必须通过关键字 inline
18、来定义C.在类体中定义的函数,都是内联函数 D.内联函数不需要 return 语句解析:解析:在类体中定义的成员函数,C+系统会自动将它们作为内联函数处理,而在类外定义的成员函数,系统并不把它们默认为内联函数,内联函数可以用 return,以可以不用,所以只有选项 C 正确。24.有如下类定义: class Person public: Person(string s):name(s) protected: string name; ;class Father:virtual public Person public: Father(string s):Person(s) ; class Mo
19、ther:virtual public Person public: Mother(string s):Person(s) ; class Child:public Father,public Mother,virtual public Person public: Child(string s1,string s2,string s3):Mother(s1),Father(s2),Person(s3) ;在建立派生类 Child 的对象时,其基类 Father、Mother和 Person 的构造函数的调用顺序为(分数:2.00)A.Father,Mother,PersonB.Mother,
20、Father,PersonC.Person,Father,Mother D.Father,Person,Mother,Person,Person解析:解析:执行派生类构造函数的顺序是:1、调用基类构造函数,2、调用子对象构造函数,3、再执行派生类构造函数,所以本题中先调用基类 person 构造函数,然后执行 father 构造函数,最后执行mother 构造函数。25.数据库设计过程不包括(分数:2.00)A.概念设计B.逻辑设计C.物理设计D.算法设计 解析:解析:数据库设计过程主要包括需求分析、概念结构设计、逻辑结构分析、数据库物理设计、数据库实施、数据库运行和维护阶段。答案为 D 选项
21、。26.下列关于类的析构函数的叙述中,错误的是(分数:2.00)A.定义析构函数时不能指定返回值B.析构函数的函数名就是类名前加上字符C.析构函数可以重载 D.在一个类中如果没有定义析构函数,系统将自动生成一个析构函数解析:解析:本题考查类的析构函数的定义,析构函数(destructor)与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后“的工作(例如在建立对象时用 new 开辟了一片内存空间,应在退出前在析构函数中用 delete 释放)。以 C+语言为例,析构函数名也应与类名相同,只是在函数名前面加一个波浪符,例如stu
22、d(),以区别于构造函数。它不能带任何参数,也没有返回值(包括 void 类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。所以 C 选项错误。27.在语句“coutA;“中,cout 是(分数:2.00)A.类名B.对象名 C.函数名D.C+的关键字解析:解析:本题考查提取运算符,cout 为对象名,所以 B 选项正确。28.Windows 环境下,由 C+源程序文件编译而成的目标文件的扩展名是(分数:2.00)A.oB.obj C.exeD.h解析:解析:A 选项中,o 是 linux 环境下编译后的目标文件的扩展名;
23、C 选项中,exe 是 windows 环境下程序链接之后的可执行文件的扩展名;D 选项中,h 是源程序头文件;答案为 B。29.有如下类声明: class Mau int k; const int m; public: Mau(int k1, int m1); ;则构造函数Mau 的下列定义中,有编译错误的是(分数:2.00)A.Mau:Mau(intk1,intm1):k(k1)m=m1; B.Mau:Mau(intk1,intm1):m(m1)k=k1;C.Mau:Mau(intk1,intm1):k(k1),m(m1)D.Mau:Mau(intk1,intm1):m(m1),k(k1)
24、解析:解析:C+中,常数据成员必须在构造函数的初始化列表中完成初始化,答案为 A。30.已知枚举类型声明语句为:enum COLOR WHITE, YELLOW, GREEN=8, RED, BLACK=15 ;则枚举常量RED 的值为(分数:2.00)A.2B.3C.9D.10 解析:解析:枚举类型中,枚举成员可以显式初始化或隐式初始化;默认的情况下第一个枚举成员赋值为0,后面每个成员赋值比前面大 1。所以枚举类型 COLOR 中各个成员值分别为:0,1,5,8,9,15。RED 为 9,答案为 C。31.有如下类声明和函数声明: class Base int m; public: int
25、n; protected: int p; ; class Derived: public Base int k; ; void f(Derived d);则允许函数 f 访问的参数 d 的数据成员的个数是(分数:2.00)A.1 B.2C.3D.4解析:解析:C+中,以 class 关键字定义的类默认的访问级别为 private,另外对于公有继承,基类成员保持自己的访问级别(private 成员除外),即基类的 public 成员为派生类的 public 成员,基类的protected 成员为派生类的 protected 成员;本题中,Derived 类以 public 方式继承 Base,所
26、以 Derived中 public 成员有:n,protected 成员有:p,private 成员有:k,不可见的成员有:m;这些成员中,对Derived 类对象可见的只有 public 成员 n,答案为 A。32.下列关于栈的叙述正确的是( )。(分数:2.00)A.栈按“先进先出“组织数据B.栈按“先进后出“组织数据 C.只能在栈底插入数据D.不能删除数据解析:解析:栈是按“先进后出“的原则组织数据的,数据的插入和删除都在栈顶进行操作。33.由于常对象不能被更新,因此( )。(分数:2.00)A.通过常对象只能调用它的常成员函数 B.通过常对象只能调用静态成员函数C.常对象的成员都是常成
27、员D.通过常对象可以调用任何不改变对象值解析:解析:本题考查常对象的基本知识,常对象只能调用它的常成员函数,而不能调用非 const 函数,常对象的成员函数不一定都是常成员函数,只需保证其数据成员是常数据成员即可。所以本题选 A。34.下列数据结构中,能够按照“先进后出“原则存取数据的是( )。(分数:2.00)A.循环队列B.栈 C.队列D.二叉树解析:解析:栈是按先进后出的原则组织数据的。队列是先进先出的原则组织数据。35.若要对 Data 类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。(分数:2.00)A.Data+(Data);B.Dataoperator+(Data
28、); C.Data+operator(Data);D.operator+(Data,Data);解析:解析:根据重载加法运算符的格式,只有 B 选项正确。36.下列关于模板的叙述中,错误的是(分数:2.00)A.调用模板函数时,在一定条件下可以省略模板实参B.可以用 int、double 这样的类型修饰符来声明模板参数C.模板声明中的关键字 class 都可以用关键字 typename 替代 D.模板的形参表中可以有多个参数解析:解析:本题考查类模板是是类的抽象,类是类模板的实例。模板的类型参数由关键字 class 或关键字 typename 及其后的标识符构成,(在标准 C+之前关键字 ty
29、pename 没有被支持,把这个关键字加入到C+中的原因是因为有时必须要靠它来指导编译器解释模板定义。)本题 C 选项错误。37.下列叙述中,错误的是(分数:2.00)A.true 是一个逻辑型常量B.x 是一个字符型常量 C.100 是一个 int 常量D.2.71828 是一个 double 常量解析:解析:考查常量定义,B 选项中“x“为一个字符串,x才是字符常量,所以 B 选项错误。38.有如下类定义: class Shape public: _ /纯虚函数 Draw 的声明 ;横线处缺失的纯虚函数 Draw 的声明是(分数:2.00)A.voidDraw()=0;B.virtualv
30、oidDraw()=0; C.virtualvoidDraw()D.virtualvoidDraw(int=0);解析:解析:在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。一般形式如下: class virtual ()=0; ; 所以 B 选项正确。39.常量 4.2、4.2f、4L 的数据类型分别是(分数:2.00)A.float、float、doubleB.double、float、long C.double、double、floatD.float、float、long解析:解析:本题考查实型变量,4.2 默认为 dou
31、ble,4.2f 为 float 型的、4L 为 long 型的。所以 B 选项正确。40.下列 C+流的操作符中,能够设置下一个数据的输出宽度的是(分数:2.00)A.setprecisionB.setw C.setfillD.showpoint解析:解析:setprecision 设置实数的精度;setw 设置字段宽度;setfill 填充字符;showpoint 强制输出浮点数的小数点和尾数 0;答案为 B。二、基本操作题(总题数:1,分数:2.00)41.请使用 VC6 或使用【答题】菜单打开考生文件夹 proj1 下的工程 proj1,此工程中含有个源程序文件 proj1cpp。其中
32、位于 WI“注释“ERROR*found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:NUM=0Value=1 注意:只修改注释“ERROR*found*”的下一行语句,不要改动程序中的其他内容。proj1cpp#includeiostreamusingnamespacestd;classMyClassinti;friendvoidIncrement(MyClass&f);public:constintNUM;ERROR*found*MyClass(inti=0)NUM=0;_i=i;intGetValue()constreturni;);ERROR*found*voidIn
33、crement()fi+;intmain()MyClassobj;ERROR*found*MyClass:Increment(obj),cout“NUM=“objNUMend1“Value=“objGetValue()end1;return0;(分数:2.00)_正确答案:(正确答案:(1)MyClass(inti=0):NUM(0) (2)voidIncrement(MyClass&f)f_i+; (3)Increment(obj);)解析:解析:(1)主要考查考生对常量数据成员初始化方法的掌握,常量数据成员的初始化只能通过构造函数的成员初始化列表进行,并且要使用关键字 const 修饰。该
34、题的前一条语句 constintNUM;,说明NUM 是常量数据成员。 (2)主要考查考生对友元函数的掌握,友元函数的定义与声明要一致,先看该友元函数的声明部分:friendvoidIncrement(MyClass&f);,返回类型为 void,函数参数为 MyClass&f;再比较出错的语句:voidIncrement()f_i+;,错误在于该函数没有参数,应把 MyClass&f 填在括号内。 (3)主要考查友元函数的调用,友元函数并不属于类,因此调用友元函数时不需要添加类名及作用域,只需要像调用普通函数一样即可。三、简单应用题(总题数:1,分数:2.00)42.请使用 VC6 或使用【
35、答题】菜单打开考生文件夹 proj2 下的工程 proj2,该工程中含有一个源程序文件 proj2cpp,其中定义了 CharShape 类、Tfiane 类和 Rectangle 类。CharShape 是一个抽象基类,它表示由字符组成的图形 (简称字符图形),纯虚函数 Show 用于显示不同字符图形的相同操作接口。Triangle 和 Rectangle 是 CharShape 的派生类,它们分别用于表示字符三角形和字符矩形,并且都定义了成员函数 Show,用于实现各自的显示操作。程序的正确输出结果应为:*#请阅读程序,分析输出结果,然后根据以下要求在横线处填写适当的代码并删除横线。(1)
36、将 Triangle 类的成员函数 Show 补充完整,使字符三角形的显示符合输出结果。(2)将 Rtangle 类的成员函数 Show 补充完整,使字符矩形的显示符合输出结果。(3)为类外函数fun 添加合适的形参。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。proj2cpp#includeiostreamusingnamespacestd;classCharShapepublic:CharShape(charch):ch(ch);virtualvoidShow()=0;protected:char_ch;组成图形的字符;classTrian
37、gle:publicCharShapepublic:Triangle(charch,intr):CharShape(ch),_rows(r)voidShow();private:introws;行数;classRectangle:publicCharShapepublic:Rectangle(charch,intr,intC):CharShape(ch),_rows(r),_cols(c)voidShow();private:int_rows,_cols;行数和列数;voidTriangle:Show()输出字符组成的三角形for(inti=1;i=_rows;i+)*found*for(in
38、tj=l;j=_;j+)coutch;coutend1;voidRectangle:Show()输出字符组成的矩形*found*for(inti=1,i=_;i+)*found*for(intj=1;j=_;j+)coutch;coutend1;*found*为 fun 函数添加形参 voidfun(_)csShow();intmain()Triangletri(*,4);Rectanglerect(#,3,8);fun(tri);fun(rect);return0;(分数:2.00)_正确答案:(正确答案:(1)i*2 一 1 (2)_rows (3)_cols (4)CharShape&c
39、s)解析:解析:(1)考查 for 循环语句,该语句所在的函数的功能是输出字符组成的三角形。从外层循环中可以看出下标 i 代表行数,那么下标 j 就代表每一行字符的个数,因为要输出的是三角形,所以每一行的个数与该行的行数相关,即 j=i*21;。 (2)考查 for 循环语句,该语句所在的函数的功能是输出字符组成的矩形。回到 Rectangle 类中可以知道矩形的长和宽就是类中私有成员的行数和列数,因此在这里只要要求下标 i 不大于行数即可。 (3)考查 for 循环语句,该语句所在的函数的功能是输出字符组成的矩形。回到 Rectangle 类中可以知道矩形的长和宽就是类中私有成员的行数和列数
40、,因此在这里只要要求下标 j不大于列数即可。 (4)主要考查考生对虚函数的掌握,该语句所在的函数是普通函数 fun,题目要求为fun 函数添加形参。从函数体中可以知道形参名为 cs,那么形参的类型是什么呢?就是抽象类CharShape,因此要使用 CharShape&cs 才可以实现题目要求输出的内容。四、综合应用题(总题数:1,分数:2.00)43.请使用“答题”菜单或使用 VC6 打开考生文件夹下 proj3 下的工程 proj3,其中声明了 Matrix 类,是一个用于表示矩阵的类。operator+的功能是实现两个矩阵的加法运算。例如,若有两个 3 行 3 列的矩阵 则 A 与 B 相加的和为 (分数:2.00)_正确答案:(正确答案:for(inti=0;i解析:解析:主要考查考生对重载运算符的掌握,函数 operator+的功能是将形参中两个 Matrix 对象相加,返回一个新的 Matrix 对象,新对象的二维数组 array 的元素是形参中两个对象的二维数组 array 逐个元素之和。由于 Matrix 的 array 是私有成员,所以不能通过对象直接对 array 进行操作,必须通过成员函数 getElement 来获取两个对象 array 数组元素的值,再通过成员函数 setElement 来完成相加功能,结果保存在临时对象 sum 中,并返回。