2024年6月12日发(作者:)

选择题

1、 关键字 (C) 说明对象或变量初始化后不会被修改。

A. static B. public C. const D. inline

2、 如果调用带有默认参数的函数时缺少一个参数,则(D)参数就作为这一参数。

A. 第一个 B. 最后一个 C. 中间一个 D. 以上都不是

3、 成员函数可声明为静态的,条件是它不访问(C)类成员

A. 静态 B. 常数 C. 非静态 D. 公共

4、 内联函数执行起来比标准函数(B)。

A. 更慢 B. 更快 C. 次数更多 D. 以上都不是

5、 默认参数的值由(A)提供。

A. 该函数 B. 调用程序 C. 上述二者 D. 以上都不是

6、 在 C++ 中,混合类型表达式(A)。

A. 允许存在 B. 为一错误 C. 从 int 到 float D. 从 float 到 int

7、 表达式 long(intVar) 也可表示为(C)。

A. intvar = long; B. intVar(long) C.(long)intVar D. 以上都不是

8、 静态数据成员的生存期(A)。

A. 与整个程序相同 B.不长于类的生存期

C.取决于创建的对象数 D. 以上都不是

9、 要让一个类中的所有对象具有共同的数据,请使用(C)。

A. 常数成员变量 B. 私有数据成员C. 静态数据成员 D. 以上都是

10、 设置虚基类的目的是:(B)

A.简化程序 B.消除二义性 C.提高运行效率 D.减少目标代码

11、 C++是( C)。

A. 面向对象的程序设计语言

B. 面向过程的程序设计语言

C. 既支持面向对象的程序设计又支持面向过程的程序设计的混合型语言

D. 非结构化的程序设计语言

12、 面向对象程序设计思想的主要特征中不包括(D)。

A. 封装性 B. 多态性 C. 继承性 D. 功能分解,逐步求精

13、 若定义:string str; 当语句cin>>str; 执行时,从键盘输入:

Microsoft Visual Studio 6.0! e()

所得的结果是str=(B)。

A. Microsoft Visual Studio 6.0! B. Microsoft

C. Microsoft Visual D. Microsoft Visual Studio 6.0

14、 下列语句中,将函数int sum(int x, int y)正确重载的是(C)。

A. float sum(int x, int y); B. int sum(int a, int b);

C. float sum(float x, float y); D. double sum(int y, int x);

15、 下列表示引用的方法中,(A)是正确的。

已知:int a=1000;

A. int &x=a; B. char &y; C. int &z=1000; D. float &t=&a;

16、 在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快

执行速度,选用(A)。

A. 内联函数 B. 重载函数 C. 递归调用 D. 嵌套调用

17、 下列有关C++类的说法中,不正确的是(D)。

A. 类是一种用户自定义的数据类型

B. 只有类中的成员函数或类的友元函数才能存取类中的私有成员

C. 在类中,如果不做特别说明,所有成员的访问权限均为私有的

D. 在类中,如果不做特别说明,所有成员的访问权限均为公用的

18、 已知X类,则当程序执行到语句:X array[3];时,调用了(D)次构造

函数。

A. 0 B. 1 C. 2 D. 3

19、 下面说法中,正确的是(B)

A. 一个类只能定义一个构造函数,但可以定义多个析构函数

B. 一个类只能定义一个析构函数,但可以定义多个构造函数

C. 构造函数与析构函数同名,只是名字前加了一个求反符号(~)

D. 构造函数可以指定返回类型,而析构函数不能指定任何返回类型,即使是

void类型也不可以

20、 已知:print( )函数是一个类的常成员函数,它无返回值,下列表示中,

(A)是正确的。

A. void print( ) const; B. const void print( );

C. void const print( ); D. void print(const);

21、 下面描述中,表达错误的是(B)

A. 公用继承时基类中的public成员在派生类中仍是public的

B. 公用继承时基类中的private成员在派生类中仍是private的

C. 公用继承时基类中的protected成员在派生类中仍是protected的

D. 私有继承时基类中的public成员在派生类中是private的

22、 下面(B)的叙述不符合赋值兼容规则。

A. 派生类的对象可以赋值给基类的对象

B. 基类的对象可以赋值给派生类的对象

C. 派生类的对象可以初始化基类的对象

D. 派生类的对象的地址可以赋值给指向基类的指针

23、 关于虚函数的描述中,(C)是正确的。

A. 虚函数是一个static类型的成员函数

B. 虚函数是一个非成员函数

C. 基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数

D. 派生类的虚函数与基类的虚函数具有不同的参数个数和类型

24、 下列关于静态数据成员的说法,不正确的是(C)。

A. 类中定义的公用静态数据成员,可以通过类的对象来访问

B. 类中定义的所有静态数据成员,都必须在类外初始化

C. 静态数据成员不是所有对象所共用的

D. 普通的成员函数可以直接访问类中的静态数据成员

25、 下面对模板的声明,正确的是(C)。

A. template B. template

C. template D. template

26、 下列的各类函数中,(C)不是类的成员函数

A. 构造函数 B. 析构函数 C. 友元函数 D. 复制构造函数

27、 关于C++与C语言关系的描述中,(D)是错误的。

A.C语言是C++语言的一个子集 B.C语言与C++语言是兼容的

C.C++语言对C语言进行了一些改进 D.C++语言和C语言都是面向对象的

28、 已知:int m=10; 下列表示引用的方法中,(A)是正确的。

A.int &x=m; B.int &y=10; C.int &z; D.float &t=&m;

29、 系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下

列选项中,不能作为依据的是(A)。

A.函数的返回值类型 B.参数的类型 C.函数名称 D.参数个数下

30、 已知X类,则当程序执行到语句X* array[3];时,调用了(A)次构造函

数。

A.0 B.1 C.2 D.3

31、 有关析构函数的说法,不正确的是(B)。

A.析构函数有且仅有一个

B.析构函数和构造函数一样可以有形参

C.析构函数的功能是在系统释放对象之前作一些内存清理工作

D.析构函数无任何函数类型

32、 类定义的内容允许被其对象无限制地存取的是(C)。

A.private 部分 B. protected 部分 C.public 部分 D.以上都不对

33、 关于常数据成员的说法,不正确的是(D)。

A.常数据成员的定义形式与一般常变量的定义形式相同,只不过常数据成员

的定义必须出现在类体中

B.常数据成员必须进行初始化,并且不能被更新

C.常数据成员通过构造函数的成员初始化列表进行初始化

D.常数据成员可以在定义时直接初始化

34、 运用运算符delete删除一个动态对象时(C)。

A.系统首先为该动态对象调用构造函数,再释放其占用的内存

B.系统首先释放该动态对象占用的内存,再为其调用构造函数

C.系统首先为该动态对象调用析构函数,再释放其占用的内存

D.系统首先释放动态对象占用的内存,再为其调用析构函数

35、 可以在类外用p.a的形式访问派生类对象p的基类成员a,其中a是(D)。

A.私有继承的公用成员 B.公用继承的私有成员

C.公用继承的保护成员 D.公用继承的公用成员

36、 在公用继承方式下,有关派生类对象和基类对象的关系,不正确的叙述是

(C)。

A.派生类的对象可以赋给基类的对象

B.派生类的对象可以初始化基类的引用

C.派生类的对象可以直接访问基类中的成员

D.派生类的对象的地址可以赋给指向基类的指针

37、 在C++中,用于实现动态多态性的是(D)。

A.内联函数 B.重载函数 C.模板函数 D.虚函数

38、 不能说明为虚函数的是(B)。

A.析构函数 B.构造函数 C.类的成员函数 D.以上都不对

39、 如果一个类至少有一个纯虚函数,那么就称该类为(A)。

A.抽象类 B.派生类 C.纯基类 D.以上都不对

40、 下列运算符中,(C)运算符在C++中不能被重载。

A.&& B.[] C.:: D.new

41、 模板的使用实际上是将类模板实例化成一个(C)。

A.函数 B.对象 C.类 D.抽象类

42、 假定MyClass为一个类,则该类的拷贝构造函数的声明语句为(C)。

A.MyClass(MyClass x) B.MyClass&(MyClass x)

C.MyClass(MyClass &x) D.MyClass(MyClass *x)

43、 编写C++程序一般需经过的几个步骤依次是(B)

A. 编辑、调试、编译、连接

B. 编辑、编译、连接、运行

C. 编译、调试、编辑、连接

D. 编译、编辑、连接、运行

44、 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成

一个实体,这实体也就是(A)

A. 类B. 对象C. 函数体D. 数据块

45、 对基类和派生类的关系描述中,错误的是(B)

A. 派生类是基类的具体化B. 基类继承了派生类的属性

C. 派生类是基类定义的延续D. 派生类是基类的特殊化

46、 C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求

解问题方法上进行的最大改进是(B)

A.面向过程 B.面向对象 C.安全性 D.复用性

47、 下面描述中,表达错误的是(B)

A. 公用继承时基类中的public成员在派生类中仍是public的

B. 公用继承时基类中的private成员在派生类中仍是private的

C. 公用继承时基类中的protected成员在派生类中仍是protected的

D. 私有继承时基类中的public成员在派生类中是private的

48、 对使用关键字new所开辟的动态存储空间,释放时必须使用(C)

A.free B.create C.delete D.realse

49、 设类A将其它类对象作为成员,则建立A类对象时,下列描述正确的是(A)

A.A类构造函数先执行 B.成员构造函数先执行

C.两者并行执行 D.不能确定

50、 要让一个类中的所有对象具有共同的数据,请使用(C)。

A. 常数成员变量 B. 私有数据成员 C. 静态数据成员 D. 以上都是

51、 C++是(C)。

A. 面向对象的程序设计语言

B. 面向过程的程序设计语言

C. 既支持面向对象的程序设计又支持面向过程的程序设计的混合型语言

D. 非结构化的程序设计语言

52、 一个类可包含析构函数的个数是(B)

A.0个 B.1个 C.至少一个 D.0个或多个

53、 在函数定义中的形参属于(B)

A. 全局变量B. 局部变量C. 静态变量 D. 寄存器变量

54、 关于对象概念的描述中,说法错误的是(A)

A. 对象就是C语言中的结构变量

B. 对象代表着正在创建的系统中的一个实体

C. 对象是类的一个变量

D. 对象之间的信息传递是通过消息进行的

55、 下面叙述不正确的是(D)

A. 派生类一般都用公有派生

B. 对基类成员的访问必须是无二义性的

C. 赋值兼容规则也适用于多重继承的组合

D. 基类的公有成员在派生类中仍然是公有的

56、 在公有派生类的成员函数不能直接访问基类中继承来的某个成员,则该成

员一定是基类中的(A)

A. 私有成员 B. 公有成员 C. 保护成员 D. 保护成员或私有成员

57、 关于this指针使用说法正确的是(A)

A. 保证每个对象拥有自己的数据成员,但共享处理这些数据的代码

B. 保证基类私有成员在子类中可以被访问。

C. 保证基类保护成员在子类中可以被访问。

D. 保证基类公有成员在子类中可以被访问。

58、 所谓多态性是指 (B)

A. 不同的对象调用不同名称的函数

B. 不同的对象调用相同名称的函数

C. 一个对象调用不同名称的函数

D. 一个对象调用不同名称的对象

59、 假设ClassY:publicX,即类Y是类X的派生类,则说明一个Y类的对象时

和删除Y类对象时,调用构造函数和析构函数的次序分别为(A)

A. X,Y;Y,X B. X,Y;X,Y C. Y,X;X,Y D. Y,X;Y,X

60、 假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则

访问x对象中函数成员a()的格式为(B)

A. x.a B. x.a() C. x->a D. (*x).a()

61、 数下下列有关C++类的说法中,不正确的是(D)。

A.类是一种用户自定义的数据类型

B.只有类中的成员函数或类的友元函数才能存取类中的私有成员

C.在类中,如果不做特别说明,所有成员的访问权限均为私有的

D.在类中,如果不做特别说明,所有成员的访问权限均为公用的

62、 下列哪个类型函数不适合声明为内联函数(D)

A.函数体语句较多 B.函数体语句较少

C.函数执行时间较短 D.函数执行时间过长

63、 下列关于类的权限的描述错误的是(A)

A.类本身的成员函数只能访问自身的私有成员

B.类的对象只能访问该类的公有成员

C.普通函数不能直接访问类的公有成员,必须通过对象访问

D.一个类可以将另一个类的对象作为成员 (组合)

64、 在哪种派生方式中,派生类可以访问基类中的protected成员(B)

A.public和private B.public和protected

C.protected和private D.仅protected

65、下列特性中不是面向对象程序设计语言所特有的是(D)。

(A)数据封装 (B)继承(C)多态性 (D)模板

66、(B)是给变量取一个别名,它引入了变量的同意词。

(A)指针 (B)引用 (C)枚举 (D)结构

67、类成员的访问权限中,(C)只能被本类的成员函数和其友元函数访问。

(A)share (B)public (C)private (D)protected

68、关于构造函数,下列说法不正确的是(D)。

(A)构造函数名字和类名相同

(B)构造函数在创建对象时自动执行

(C)构造函数无任何函数返回类型

(D)构造函数有且只有一个

69、派生类可以访问其基类的(A)。

(A)公有成员 (B)保护成员 (C)私有派生 (D)公有和保护成员

70、下列关于运算符重载的描述中,错误的是(B)。

(A)运算符重载不可以改变操作数的个数

(B)运算符重载不可以改变运算符的功能

(C)运算符重载不可以改变结合方向

(D)运算符重载不可以改变运算优先级

71、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问

题方法上进行的最大改进是(B)

(A)面向过程 (B)面向对象 (C)安全性 (D)复用性

72、对于类中定义的成员,其隐含访问权限为(C)。

A.public B.protected C.private D.static

73、下面有关重载函数的说法中正确的是(C)

(A)重载函数必须具有不同的返回值类型; (B)重载函数形参个数必须不同;

(C)重载函数必须有不同的形参列表 (D)重载函数名可以不同;

74、有如下的对类“CSample”的说明,其中(A)是错误的。

class CSample {

A.int a=23;

B.CSample();

public:

C.CSample(int val);

D.~ CSample();

75、在int a=3,int *p=&a;中,*p的值是( D)

A.变量a的地址值 B.无意义 C.变量p的地址值 D.3

76、每个类(C)构造函数。

(A)只能有一个 (B)只可有公有的 (C)可以有多个 (D)只可有缺省的

77、在一个类中可以对一个操作符进行(D)重载。

(A)1 种 (B)2 种以下 (C)3 种以下 (D)多种

78、在公有继承的情况下,基类非私有成员在派生类中的访问权限(B)

(A)受限制 (B)保持不变 (C)受保护 (D)不受保护

79、下面描述中,表达错误的是(B)

(A)公有继承时基类中的public成员在派生类中仍是public的

(B)公有继承是基类中的private成员在派生类中仍是private的

(C)公有继承时基类中的protected成员在派生类中仍是protected的

(D) 私有继承时基类中的public成员在派生类中是private的

80、定义析构函数时,应该注意(C)

(A)其名与类名完全相同 (B)返回类型是 void 类型

(C)无形参,也不可重载 (D)函数体中必须有 delete 语句

81、对于在类中定义的静态数据成员,下面正确的说法是(C)

A.该类的每个对象中都有一个静态数据成员 B.对象创建时产生

C.在类外进行初始化 D.既可以在类外初始化,也可以在类内初始化

82、C++中声明常变量的关键字是(A)。

A. const B. extern C. public D. enum

填空题

(红色标记为答案)

1、类和对象的关系可表述为:类是对象的抽象,而对象则是类的具体实例。

2、在C++中,三种继承方式的说明符号为public 、protected和private,如果

不加以说明,则默认的继承方式为 private

3、如果只想保留公共基类的一个复制,就必须使用关键字virtual把这个公共基

类声明为虚基类。

4、若要把void fun()定义为类A的友元函数,则应在类A的定义中加入语句

friend void fun();。

5、类的静态成员分为静态成员函数 和静态成员数据。

7、通过关键字template可以声明类模板,通过关键字numtype指定函数模板的类

型参数,有几个类型参数就有几个类型关键字。

8、列出C++中两种用户自定义的数据类型:class 、vector。

9、构造函数的作用是 处理对象的初始化。

10、静态成员函数没有隐含的this指针,所以,在C++程序中,静态成员函数主

要用来访问静态数据成员,而不访问非静态成员。

11、在图1中,A,B,C,D,E,F均是类,其中属于单继承的派生类有C,属于多

继承的派生类有D、F,类F的基类有D E,类A的派生类有D F。

A B

C

F

图1 类的继承层次图

D

E

12、从实现的角度来讲,多态性可以划分为两类:静态多态性 和动态多态性。

13、如果一个类包含一个或多个纯虚函数,则该类称为抽象类。

14、列出C++中的两种代码复用方式:继承和组合或模板。

15、析构函数的作用是在撤销对象占用的内存之前完成一些清理工作,使这部分

内存可以被程序分配给新对象使用。

16、假定A是一个类名,则该类的拷贝构造函数的原型说明语句为:A(A& b)。

17.任何类中允许有三种类型的数据,分别是public;private;protected。

18指向类成员的指针包含指向类属性成员的指针和指向类成员函数的指针。

19可以通过类名限定或者同名隐藏两种方式来解决二义性问题。

20如果对象的生存期与程序的运行期相同,我们称它具有

静态生存期。

21 .C++提供的多重继承机制允许一个派生类继承多个基类,即使这些基类是相

互无关的。

22.声明一个int型指针,用new语句为其分配包含10个元素的地址空间(不用

初始化),声明语句为:int* p= new int[10] delete [] p。

23友元有两种表现形式友元函数、友元类。

24派生类的生成过程包括从基类接受成员、调整从基类接受的成员 、在声明派

生类时增加的成员三个过程。

25对象数组的每个数组元素都是一个对象,通过这个对象,便可访问到它的公

有成员,一般形式是对象数组名[索引].公有成员。

1、在C++中,函数的参数有两种传递方式,它们是值传递

和地址传递。

2、 在C++中定义常变量经常用到的关键字是const。

3、 非类成员函数应声明为类的友元函数才能访问这个类的private成员。

4、假定要访问一个指针p所指对象中的公有成员a,则表示方法为p->a。

5、 静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被该类的所有

对象共享。

6、 多态性是面向对象的重要特征之一,在C++中的四种表现方式为强制多态、

重载多态、类型参数化多态和包含多态。

7、 为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常需要

为该类定义析构函数。

8、 在C++中利用类向导创建一个名为Cpoint的类,则会自动产生类的声明文件

和类的实现文件 。

9、在C++类中可以包含public、private和protected三种具有不同访问控制权

的成员。

10、

11、

12、

定义类时,在类头中将使用关键字class来表示类定义的开始。

如果一个类中至少有一个纯虚函数,则该类称为抽象类。

C++类的组成包括数据成员和成员函数,友元不是(是、不是)该类的成

员函数。

13、

14、

友员函数是用关键字friend修饰的非成员函数。

若有:

int i;

int &j=i;

i=10;

j=i+1;

则i=11,j=11。

8、 new的功能是动态分配内存空间,delete的功能是动态撤销内存空间。

简答题

1. 阐述C++中函数三种调用的方式实现机制、特点及其实参、形参的格式,

最好用代码说明。

选用函数参数类型的根本原则。1)使用传值方式传递非常小的对象。2)使用传

引用方式传递你不需要修改的大对象。3)让函数返回一个值,而不是修改通过

引用参数传递来的对象。4)只有迫不得已时才使用传引用方式。也就是说虽然可

以通过函数的返回值修改原来的参数值,但是函数的返回值毕竟只有一个,如果

需要在一个被调函数中同时修改主调函数的参数的值的话,则只能使用传引用变

量的方式。此外使用传引用方式还针对对容器的操作,因为容器的拷贝代价不动

态的,通过传值方式代价太大,通过传递常引用方式又不利于操作容器

例如:#include

using namespace std

;void swap(int x,int y);void

swapp(int *x,int *y);void swappp(int &x,int &y);int main(){ int

a=3,b=11; int *p=&a,*q=&b; int &m=a,&n=b; swap(a,b);

cout<<"swap调用后后"<<"a="<

swapp(p,q); cout<<"swapp调用后后

"<<"a="<

用后后"<<"a="<

cout<<"swap前"<<"x="<

temp=x; x=y; y=temp; cout<<"swap后

"<<"x="<

cout<<"swapp前"<<"x="<<*x<<"t"<<"y="<<*y<

temp=*x; *x=*y; *y=temp; cout<<"swapp前

"<<"x="<<*x<<"t"<<"y="<<*y<

cout<<"swap前"<<"x="<

temp=x; x=y; y=temp; cout<<"swap后

"<<"x="<

2. 用代码举例说明如何定义指向普通常量的指针、指向一维数组的指针、指

向对象的指针、指向类的数据成员的指针和指向类的成员函数的指针。

3. 什么是面向对象

4. 面向对象程序设计的基本特征

5. 面向对象和面向过程程序设计的区别

6. 简述 private、 protected、 public、 internal 修饰符的访问权限。

7. 重载与覆盖的区别?

8. 面向对象特征

9. 什么是多态,多态性是如何实现的

10. 什么是构造函数?什么是析构函数?

11. 构造函数与析构函数差别

12. 什么是虚基类

13. 什么是简单继承多重继承?继承有什么好处?

14. C++优点

15. C++中,什么是函数重载

C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和

参数类型不相同,这些同名的函数用来实现不同的功能。这就是函数的重载,

即一个函数名多用。

16. 什么是封装 有什么好处

所谓“封装”,指两方面的含义:一是将有关的数据和操作代码封装在一个对

象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中

某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,

接受外界的消息。这种对外隐蔽的做法称为信息隐蔽。信息隐蔽还有利于数据

安全,防止无关的人了解和修改数据。

17. 什么是操作符重载

18. C++如何实现软件重用

编程题

1.测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角两个点的

坐标,能计算矩形的面积。

2.定义一boat与car两个类,二者都有weight属性,定义二者的一个友元函数

totalweight(),计算二者的重量和。

3.设计一个汽车类vehicle,包含的数据成员有车轮个数wheels和车重weight。

小车类car是它的派生类,其中包含载人数passenger_load。每个类都有相关

数据的输出方法。在主程序中定义一个car类对象,对其车轮个数、车重、载人

数进行设置并显示。

4.下列Shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )

则是一个通用的用以求不同形状的图形面积总和的函数。

class Shape

{public:

};

virtual double area()=0;

double total(Shape *s[ ], int n)

{ double sum=0.0;

for(int i=0; iarea( );

}

要求:(1)从Shape类派生圆类(Circle)、正方形类(Square),圆类新增数据

成员半径(radius),正方形类新增数据成员边长(a),圆类和正方形类都有构

造函数,修改、显示数据成员值的函数,求面积函数。

(2)写出main()函数,计算半径为5.5的圆和边长为9.9的正方形的面积和

(必须通过调用total函数计算)。

5. 编写一个程序根据输入的三角形的三条边判断是否能组成三角形,如果可以

则输出它的面积和三角形 类型(等边、等腰、直角三角形) 。

6.定义一个学生类,其中有3 个数据成员:学号、姓名、年龄,以及若干成员

函数。同时编写main 函数 使用这个类,实现对学生数据的赋值和输出。

7. 编写一个程序,从键盘输入半径和高,输出圆柱体的底面积和体积。

8.编写类将化氏温度转换为摄氏温度,公式为 C=(F-32)*5/9;并在主函数中

调用。

9.定义一个rectangle类,它包含两个数据成员length和width,以及包含用

于求长方形面积的成员函数。再定义rectangle的派生类rectangular,它包含

一个新的数据成员height和用来求长方体提及的成员函数。在main函数中,使

用两个类,求某个长方形的面积和某个长方体的体积。

10.声明一个 Tree(树)类,有成员 ages(树龄),成员函数 grow(int years)

用以对 ages 加上 years, showage( )用以显示 tree 对象的 ages 值。在主

函数中定义 Tree 类对象,并调用成员函数。

return sum;