习题1
基本概念题: 9.1 填空题:
(1) 一个完整的可运行程序中必须有一个名为________的函数。 (2) 一条表达式语句必须以________作为结束符。 (3)一个函数定义由________和________两部分组成。
(4)若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的________语句。
(5)C++头文件和源程序文件的扩展名分别为________和________。 (6)程序文件的编译错误分为________和_________两类。
(7)当使用________保留字作为函数类型时,该函数不返回任何值。 (8)当函数参数表用_________保留字表示时,则表示该参数表为空。
(9)从一条函数原型语句“int fun1(void);”可知,该函数的返回类型为________,该函数带有________个参数。
(10)在#include命令中所包含的头文件,可以是系统定义的头文件,也可以是________定义的头文件。
(11)重载一个函数的条件是:该函数必须在参数的个数或参数的__________上与其它同名函数有所不同。
(12)如果一个函数中有多个默认参数,则默认参数必须全部处在形参表的________部分。
(13)函数形参的作用域是该函数的____________。
(14)当定义一个结构体变量时,系统分配给该变量的内存大小等于各成员所需内存大小的_______。
9.2 选择题:
(1)以下说法中正确的是( )。
A. C++程序总是从第一个定义的函数开始执行 B. C++程序总是从main函数开始执行
C. C++函数必须有返回值,否则不能使用函数
D. C++程序中有调用关系的所有函数必须放在同一个程序文件中 (2)以下叙述中不正确的是( )。
A. 在一个函数中,可以有多条return语句
B. 函数的定义不能嵌套,但函数的调用可以嵌套 C. 函数必须有返回值
D. 不同的函数中可以使用相同名字的变量 (3)函数重载是指( )。
A. 两个或两个以上的函数取相同的函数名,但形参的个数或类型不同
1
B. 两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同
C. 两个以上的函数名字不同,但形参的个数或类型相同
D. 两个以上的函数取相同的函数名,并且函数的返回类型相同 (4)下列( )的调用方式是引用调用。
A. 形参和实参都是变量 B.形参是指针,实参是地址值 C. 形参是引用,实参是变量 D.形参是变量,实参是地址值
(5)为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择( )。
A. 内联函数 B.重载函数 C.递归函数 D.函数模板 (6)C++中函数返回值的类型是由( )决定的。
A. return语句中表达式的类型 B.该函数定义时的类型 C.调用函数时的调用语句 D.系统根据结果 (7)以下函数的返回结果是( )。
int function(char *x) {
char *p=x; while(*p++); return(p-x-1); }
A. 求字符串的长度 B.将字符串x连接到字符串p后面 C. 将字符串x复制到字符串p中 D.将字符串x反向存放 (8)以下正确的函数原型语句是( )。
A. double fun(int x,int y) B. double fun(int x;int y) C. double fun(int,int); D. double fun(int x,y);
(9)以下正确的描述是( )。
A. 函数的定义可以嵌套,函数的调用不可以嵌套 B. 函数的定义不可以嵌套,函数的调用可以嵌套 C. 函数的定义和函数的调用均可以嵌套 D. 函数的定义和函数的调用均不可以嵌套
(10)若用数组名作为函数调用的实参,传递给形参的是( )。 A. 数组的首地址 B. 数组中第一个元素的值 C. 数组全部元素的值 D. 数组元素的个数 (11)以下正确的描述是( )。 A. 不允许设置参数的默认值
B. 设置参数的默认值只能在定义函数时设置 C. 设置参数的默认值时,应该设置右边的参数 D. 设置参数的默认值时,应该全部参数都设置 (12)采用重载函数的目的是( )。
2
A. 实现共享 B. 减少空间
C. 提高速度 D. 使用方便,提高可读性
(13)当#include后面的文件名用双引号括起来时,寻找被包含文件的方式是( )。
A. 直接按系统设定的标准方式搜索目录
B. 先在源程序所在目录搜索,再按系统设定的标准方式搜索目录 C. 仅仅搜索源程序所在目录
D. 搜索当前逻辑盘上的所有目录
(14)当#include后面的文件名用尖括号括起来时,寻找被包含文件的方式是( )。
A. 直接按系统设定的标准方式搜索目录
B. 先在源程序所在目录搜索,再按系统设定的标准方式搜索目录 C. 仅仅搜索源程序所在目录
D. 搜索当前逻辑盘上的所有目录
(15) 文件包含命令中被包含的文件的扩展名( )。
A. 必须是.h B. 不能是.h C. 可以是.h或.cpp D. 必须是.cpp (16)下列对引用的陈述中不正确的是( )。
A. 每一个引用都是其所引用对象的别名,因此必须初始化 B. 形式上针对引用的操作实际上作用于它所引用的对象
C. 一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行 D. 不需要单独为引用分配存储空间 (17)若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( )放在函数原型或函数头的前面。
A. in B. inline C. inLine D. InLiner (18)在多文件结构的程序中,通常把类的定义单独存放于( )中。 A. 主文件 B. 实现文件 C. 库文件 D. 头文件 (19)在多文件结构的程序中,通常把含有main()函数的文件称为( )。 A. 主文件 B. 实现文件 C. 程序文件 D. 头文件 (20)一个C++程序文件的扩展名为( )。 A. .h B. .c C. .cpp D. .cp 9.3 C++/C语言的基本数据类型有哪些?写出它们各自的关键字。 9.4 C++/C语言的基本语句有哪些?写出它们各自的语法格式。 9.5 C++语言的枚举类型和C语言的枚举类型有什么不同? 9.6 C++语言的结构体类型和C语言的结构体类型有什么不同?
9.7 和C语言变量的定义方法相比,C++语言变量的定义方法有什么改进? 9.8 在一个变量的定义前加const关键字有什么作用? 9.9 函数怎样体现了程序的模块化设计?
9.10 什么叫函数的形参?什么叫函数的实参?
3
9.11 什么叫输入型参数?怎样设计函数的输入型参数? 9.12 什么叫输出型参数?怎样设计函数的输出型参数?
9.13 怎样把系统库函数和用户自定义函数包含到一个程序中? 9.14 什么叫函数原型?函数原型机制有什么优点?
9.15 什么叫内联函数?怎样定义内联函数?什么样的函数可以定义成内联函数?
9.16 怎样设计带缺省参数的函数?试举一例说明。 9.17 什么叫函数重载?重载的函数要满足什么条件? 9.18 怎样定义引用变量?引用变量有什么功能?
9.19 说明在设计函数时,怎样利用引用变量设计输出型参数?在调用函数时,怎样设计相应的实际参数? 9.20 自定义语句有什么用途?
9.21 程序预处理主要完成哪些工作?
9.22 如果一个程序中包含有#include语句行,则该程序的编译和运行过程是怎样的?
9.23 与用malloc()函数和free ()函数进行存储单元的动态申请和释放相比,用new运算符和delete运算符进行存储单元的动态申请和释放有什么优点?
程序阅读和设计题:
9.24 阅读程序,给出运行结果:
(1)
#include \int m=10; void a(int n) { }
void main() {
int n=3; }
a(n);
cout<<\
n=15/n; m=m/2;
(2)
#include \int count(double *a) {
4
double *p=a; while(*p!=0)
p++; return (p-a);
}
void main() { double a[]={1.0,2.0,8.0,3.0,0.0,4.0,7.0}; cout< 3) #include \bool isprime(int m) { for (int i=2;m%i!=0;i++) {} return (i==m); } void main() { int m=3; while(isprime(m)) { cout<<\ m++; } cout<<\} 4) #include \#include \int sum(int a[],int n) { for(int s=0,i=0;i } 5 (( return s; } void main() { int i,a[]={5,4,3,2,1}; cout< 5) #include \#include \void f(int *p,int n) { for(int i=0;i } } void main() { int i,a[]={0,1,2,3,4},*p=&a[0]; f(p,2); for(i=0;i<5;i++) cout< 6) #include \int x=5; int p(int x) { int y=1; static int z=1; y++;z++; return x+y+z; } void main( ) { 6 (( for(int i=1;i<3;i++) cout< 9.25 编写一个求n×n方阵主对角元素之和的函数。并设计一个测试主函数。 说明:可以使用以前学过的程序开发工具,也可以阅读掌握附录的Visual C++集成开发环境,并用这样的开发环境开发程序。 9.26 编写一个求n×n方阵主对角元素之和以及非主对角元素之和的函数。并设计一个测试主函数。 9.27 在自己的计算机上安装Visual C++集成开发环境,阅读附录1的Visual C++集成开发环境,熟悉该集成开发环境的使用方法。 9.28 编写一个把有n个元素的数组a中的元素逆置保存到数组b的函数,并设计一个测试主函数进行测试。 9.29 阅读附录2的程序调试技术,以习题1.29为例,练习调试程序的基本技术。 9.30 编写一个把有n个元素的数组a中的元素就地逆置的函数,所谓就地逆置就是逆置后的元素还保存在数组a中。并设计一个测试主函数进行测试。 7 习题2 基本概念题: 9.1 填空题: (1)以面向对象方法构造的系统,其基本单位是__________。 (2)每个对象都是所属类的一个__________。 (3)对象将其大部分实现细节隐藏起来,这种机制称为__________。 (4)对象是对问题域中客观事物的________,它是一组属性和在这些属性上操作的________。 (5)特殊类的对象拥有其一般类的全部属性与操作,称特殊类________了一般类。 (6)面向对象软件开发的生命周期分为三个阶段,即分析、________和________。 9.2 选择题: (1)关于消息,下列说法中不正确的是( )。 A. 发送消息的对象请求服务,接受消息的对象提供服务 B. 消息的发送者必须了解消息的接收者如何相应消息 C. 在C++中,消息的发送具体体现为对接收消息的对象的某个函数的调用 D. 每个对象只能接收某些特定格式的消息 (2)关于封装,下列说法中不正确的是( )。 A. 通过封装,对象的全部属性和操作结合在一起,形成一个整体 B. 通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见) C. 通过封装,每个对象都成为相对独立的实体 D. 通过封装,对象的属性都是不可见的 (3)面向对象方法的多态性是指( )。 A. 一个类可以派生出多个特殊类 B. 一个对象在不同的运行环境中可以有不同的变体 C. 针对一消息,不同的对象可以以适合自身的方式加以响应 D. 一个对象可以是由多个其他对象组合而成的 (4)软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的( )。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性 (5)软件产品可被全部或部分地再用于新的应用的能力叫做软件的( )。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性 (6)软件产品与其他软件产品组合成一个整体的难易程度叫做软件的( )。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性 (7)软件产品准确执行软件需求规格说明书中所规定的任务的能力叫做软件的( )。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性 8 (8)关于面向对象系统分析,下列说法中不正确的是( )。 A. 术语“面向对象分析”可以用缩写OOA表示 B. 面向对象分析阶段对问题域的描述比实现阶段更详细 C. 面向对象分析包括问题域分析和应用分析两个步骤 D. 面向对象分析需要识别对象的内部和外部特征 9.3 简述面向过程程序设计的基本思想。 9.4 简述面向过程软件开发方法的主要问题。 9.5 简述例2.1的C语言面向过程程序和C++语言面向对象程序的不同。 9.6 什么叫类?什么叫类的实例?类和类的实例的关系是怎样的? 9.7 什么叫消息?什么叫事件? 9.8 解释面向对象的抽象性、封装性、继承性和多态性。 9.9 多态性有几种?各自的定义是什么? 9.10 什么叫整体——部分模式?什么叫一般——特殊模式? 9.11 叙述子类对父类中方法的继承中,完全继承、扩充继承和覆盖继承三种不同的设计方法各有什么意义? 9.12 面向对象分析阶段要完成怎样的工作? 9.13 面向对象设计阶段要完成怎样的工作? 9.14 面向对象实现阶段要完成怎样的工作? 9.15 简述面向对象程序设计的优点。 复杂概念题: 9.16 分析复数在实际应用中的应用情况,用面向对象方法分析复数。要求画出复数的对象模型图,即画出复数类的类名、属性和行为。 9.17 学习过数据结构课程的学生已经熟悉堆栈的概念,用面向对象方法分析一个堆栈。要求画出堆栈的对象模型图,即画出堆栈类的类名、属性和行为。 9.18 学习过数据结构课程的学生已经熟悉队列的概念,用面向对象方法分析一个队列。要求画出队列的对象模型图,即画出队列类的类名、属性和行为。 9.19 调查学校图书馆的管理和使用方法,用面向对象方法分析一个简单的图书管理系统。要求画出图书管理系统的对象模型图,即画出所有的类(包括类名、属性和行为)以及类之间的联系方式。 9.20 调查学校教务处的管理和学生学籍查询方法,用面向对象方法分析一个简单的教务管理系统。要求画出教务管理系统的对象模型图,即画出所有的类(包括类名、属性和行为)以及类之间的联系方式。 程序设计题: 9.21 在例2.1的基础上,分别设计完成实现复数乘除功能的C语言程序和C++语言面向对象程序。并要求完成复数(1,1)和复数(2,2)的乘除运算并输出运算结果。 9 习题3 基本概念题: 9.1 填空题: (1)类定义中,既包含成员变量,也包含________。 (2)类中成员变量的访问属性通常定义为________。 (3)类中的供外部调用定义的成员函数,其访问属性通常被定义为________。 (4)对于类中定义的任何成员,其隐含访问权限为________。 (5)对于结构体中定义的任何成员,其隐含访问权限为________。 (6)若在类的定义体中给出了一个成员函数的完整定义,则该成员函数属于________函数。 (7)若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上________和两个冒号分隔符。 (8)若要把类外定义的成员函数规定为内联函数,则必须把________关键字放到函数原型或函数头的前面。 (9)把一个类的定义体和所有成员函数的定义体所构成的程序范围叫做该类的____________。 (10)假定AA是一个类,“AA* abc();”是该类中一个成员函数的原型,则在类外定义时的函数头为__________________。 (11)成员函数的所有参数在类的作用域中,成员函数的返回值________类作用域。 (12)若只需要通过一个成员函数读取成员变量的值,而不需要修改它,则应在函数头的后面加上________关键字。 (13)一个类的__________函数实现对该类对象的初始化功能。 (14)一个类的__________函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。 (15)创建类的动态对象数组时,其元素只能靠自动调用该类的____________来进行初始化。 (16)在一个类中定义拷贝构造函数的目的,是为了当利用该类的一个对象初始化另一个对象时,能够避免这两个对象的同一指针同时指向同一块__________。 (17)假定AB类中只包含一个整型成员变量a,并且它是一个常量成员,若利用参数aa对其进行初始化,则该类的构造函数的定义为____________________。 (18)假定指针p指向一个动态分配的类对象,则当执行“delete p;”语句时,在释放p所指向的动态存储空间之前将自动调用该类的____________。 (19)假定用户为类AB定义了一个构造函数“AB(int aa) {a=aa;}”,则系统(会/不会)_________为该类自动定义一个无参构造函数\。 (20)假定用户为类AB定义了一个构造函数“AB(int aa, char 10 *bb=NULL):a(aa),b(bb){}”,则该类中至少包含有__________个成员变量。 (21)假定用户为类AB定义了一个构造函数“AB(int aa) {a=aa;}”,该构造函数实现对成员变量_________的初始化。 (22)假定用户为类AB定义了一个构造函数“AB(int aa=0):a(aa){}”,则创建该类的对象时,可以有________种不同的格式。 (23)假定用户只为类AB定义了一个构造函数“AB(int aa, int bb=0) {a=aa; b=bb;}”,则创建该类的对象时,其实参表中至多带有_________个实参。 (24)假定用户只为类AB定义了一个构造函数“AB(int aa, int bb=0) {a=aa; b=bb;}”,则创建该类的对象时,其实参表中至少带有_________个实参。 (25)假定用户为类AB定义了一个构造函数“AB(int aa=0, int bb=0) {a=aa; b=bb;}”,则创建该类的对象时,可以有________种不同的格式。 (26)假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则创建该类对象x的语句“AB x();”是_________(正确/错误)的。 (27)假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则创建该类对象x的语句“AB x;”是_________(正确/错误)的。 (28)假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则创建该类对象x的语句“AB x(5);”是_________(正确/错误)的。 (29)假定AB为一个类,则该类的拷贝构造函数的函数头为_____________。 (30)假定AB为一个类,该类中含有一个指向动态数组空间的指针成员pa,则在该类的析构函数中应该包含有一条______________语句。 (31) 静态成员函数 ____访问类的静态成员变量, ____ 访问类的非静态成员变量。 (32)静态成员变量必须在所有函数的定义体外进行__________。 9.2 选择题: (1)在类作用域中能够通过直接使用该类的( )成员名进行访问。 A. 私有 B. 公有 C. 保护 D. 任何 (2)在关键字public后面定义的成员为类的( )成员。 A. 私有 B. 公有 C. 保护 D. 任何 (3)在关键字private后面定义的成员为类的( )成员。 A. 私有 B. 公有 C. 保护 D. 任何 (4)假定AA为一个类,a为该类公有的成员变量,x为该类的一个对象,则访问x对象中成员变量a的格式为( )。 A. x(a) B. x[a] C. x->a D. x.a (5)假定AA为一个类,a()为该类公有的成员函数,x为该类的一个对象,则访问x对象中成员函数a()的格式为( )。 A. x.a B. x.a() C. x->a D. x->a() (6)假定AA为一个类,a为该类公有的成员变量,px为指向该类对象的一个指针,则访问px所指对象中成员变量a的格式为( )。 11 A. px(a) B. px[a] C. px->a D. px.a (7)假定AA为一个类,a为该类私有的成员变量,GetValue()为该类公有成员函数,它返回a的值,x为该类的一个对象,则访问x对象中成员变量a的格式为( )。 A. x.a B. x.a() C. x->GetValue() D. x.GetValue() (8)假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( )。 A. int AA::a() B. int AA:a() C. AA::a() D. AA::int a() (9)假定AA为一个类,a为该类公有的成员变量,若要在该类的一个成员函数中访问它,则书写格式为( )。 A. a B. AA::a C. a() D. AA::a() (10)假定AA是一个类,“AA* abc()const;”是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值( )。 A. 已经被改变 B. 可能被改变 C. 不变 D. 受到函数调用的影响 (11)类中定义的成员默认为( )访问属性。 A. public B. private C. protected D. friend (12)结构体中定义的成员默认为( )访问属性。 A. public B. private C. protected D. friend (13)对于一个类的构造函数,其函数名与类名( )。 A. 完全相同 B. 基本相同 C. 不相同 D. 无关系 (14)对于一个类的析构函数,其函数名与类名( )。 A. 完全相同 B. 完全不同 C. 只相差一个字符 D. 无关系 (15)类的构造函数是在定义该类的一个( )时被自动调用执行的。 A. 成员函数 B. 成员变量 C. 对象 D. 友元函数 (16)类的析构函数是一个对象被( )时自动调用的。 A. 建立 B. 撤消 C. 赋值 D. 引用 (17)一个类的构造函数通常被定义为该类的( )成员。 A. 公有 B. 保护 C. 私有 D. 友元 (18) 一个类的析构函数通常被定义为该类的( )成员。 A. 私有 B. 保护 C. 公有 D. 友元 (19)假定AB为一个类,则执行 “AB x;”语句时将自动调用该类的( )。 A. 带参构造函数 B. 无参构造函数 C. 拷贝构造函数 D. 赋值重载函数 (20)假定AB为一个类,则执行 “AB x(a,5);”语句时将自动调用该类的( )。 A. 带参构造函数 B. 无参构造函数 C. 拷贝构造函数 D. 赋值重载函数 (21)假定AB为一个类,则执行 “AB *s=new AB(a,5);”语句时得到的一个动态 12 对象为_______。 A. s B. s->a C. s.a D. *s (22)假定AB为一个类,则执行 “AB r1=r2;”语句时将自动调用该类的( )。 A. 无参构造函数 B. 带参构造函数 C. 赋值重载函数 D. 拷贝构造函数 (23)若需要使类中的一个指针成员变量指向一块动态存储空间,则通常在( )函数中完成。 A. 析构 B. 构造 C. 任一成员 D. 友元 (24)当类中的一个整型指针成员指向一块具有n*sizeof(int)大小的存储空间时,它最多能够存储( )个整数。 A. n B. n+1 C. n-1 D. 1 (25)假定一个类的构造函数为 “A(int aa, int bb) {a=aa; b=aa*bb;}”,则执行 “A x(4,5);”语句后,x.a和x.b的值分别为( )。 A. 4和5 B. 5和4 C. 4和20 D. 20和5 (26)假定一个类的构造函数为 “A(int aa=1, int bb=0) {a=aa; b=bb;}”,则执行 “A x(4);”语句后,x.a和x.b的值分别为( )。 A. 1和0 B. 1和4 C. 4和1 D. 4和0 (27)假定AB为一个类,则( )为该类的拷贝构造函数的原型说明。 A. AB(AB x); B. AB(AB& x); C. void AB(AB& x); D. AB(int x); (28)假定一个类的构造函数为 “B(int ax, int bx): a(ax), b(bx) {}”,执行 “B x(1,2),y(3,4);x=y;”语句序列后x.a的值为( )。 A. 1 B. 2 C. 3 D. 4 (29)假定一个类AB只含有一个整型成员变量a,当用户不定义任何构造函数时,系统为该类定义的无参构造函数为( )。 A. AB() {a=0;} B. AB(int aa=0): a(aa) {} C. AB(int aa): a(aa) {} D. AB() {} (30)假定一个类AB只含有一个整型成员变量a,用户为该类定义的带参构造函数可以为( )。 A. AB() {} B. AB(): a(0){} C. AB(int aa=0) {a=aa;} D. AB(int aa) {} (31)对于任一个类,用户所能定义的构造函数的个数至多为( )。 A. 0 B. 1 C. 2 D. 任意个 (32)对于任一个类,用户所能定义的析构函数的个数至多为( )。 A. 0 B. 1 C. 2 D. 任意个 (33)假定AB为一个类,则执行 “AB *px=new AB[n];”语句时将( )。 A. 动态分配一个对象数组 B. 动态分配一个对象 C. 静态分配一个数组 D. 静态分配一个对象 (34)设px是指向一个类对象的指针变量,则执行 “delete px;”语句时,将自动调用该类的( )。 13 A. 无参构造函数 B. 带参构造函数 C. 析构函数 D. 拷贝构造函数 (35)当一个类对象离开它的作用域时,系统自动调用该类的( )。 A. 无参构造函数 B. 带参构造函数 C. 拷贝构造函数 D. 析构函数 (36)假定一个类对象数组为A[n],当离开它定义的作用域时,系统自动调用该类析构函数的次数为( )。 A. 0 B. 1 C. n D. n-1 (37)假定AB为一个类,则执行 “AB a[10];”语句时调用该类无参构造函数的次数为( )。 A. 0 B. 1 C. 9 D. 10 (38)假定AB为一个类,则执行 “AB *px=new AB[n];”语句时调用该类无参构造函数的次数为( )。 A. n B. n-1 C. 1 D. 0 (39)一个类的静态成员变量所表示属性 ( )。 A. 是类的或对象的属性 B. 只是对象的属性 C. 只是类的属性 D. 类和友元的属性 (40)类的静态成员的访问控制( )。 A. 只允许被定义为private B. 只允许被定义为private或protected C. 只允许被定义为public D. 可允许被定义为private、protected或public (41)静态成员函数对类的成员变量访问( )。 A. 是不允许的 B. 只允许是静态成员变量 C. 只允许是非静态成员变量 D. 可允许是静态成员变量或非静态成员变量 (42)被非静态成员函数访问的类的成员变量( )。 A. 可以是非静态成员变量或静态成员变量 B. 不可能是类的静态成员变量 C. 只能是类的非静态成员变量 D. 只能是类的静态成员变量 (43)静态成员变量的初始化是在( )中进行的。 A. 构造函数 B. 任何成员函数 C. 所属类 D. 全局区 9.3 怎样定义私有成员?怎样定义公有成员?私有成员和公有成员有什么差别? 9.4 C++语言的类定义中,类的成员变量和成员函数分别描述了对象模型中的什么成分? 9.5 成员变量在定义时是否允许给出初始值?为什么? 9.6 构造函数的功能是什么?系统是在什么时候、以什么方式调用构造函数的? 9.7 析构函数的功能是什么?系统是在什么时候、以什么方式调用析构函数的? 14 9.8 构造函数是否可以重载?重载构造函数有什么意义?析构函数是否可以重载? 9.9 构造函数设计时应注意哪些事项? 9.10 什么样的类的析构函数可以设计为空?什么样的类的析构函数不可以设计为空?为什么? 9.11 C++语言中的构造函数和析构函数有返回值吗?你能解释其原因吗? 9.12 当在类定义体外实现成员函数时,为什么要在成员函数的返回类型后、成员函数名前加上“<类名>::”? 9.13 在编译完例3.1程序后,系统是否为各成员函数的参数分配了内存空间?为什么? 9.14 创建对象和定义变量有什么差别? 9.15 什么叫const对象? 9.16 怎样创建动态对象? 9.17 一个外部程序中的对象可以访问类中的私有成员吗?可以访问类中的公有成员吗? 9.18 写出对象调用其成员的语句形式。写出指向对象的指针调用其成员的语句形式。 9.19 一个非const成员函数可以修改类中的const成员变量吗?一个const成员函数可以修改类中的const成员变量吗? 9.20 什么叫重载?重载有什么意义? 9.21 什么叫子对象?整体——部分对象模式是怎样实现的? 9.22 什么叫外部类?什么叫内部类?什么样的类可以设计成内部类? 9.23 static成员变量和非static成员变量有什么差别?static成员函数和非static成员函数有什么差别? 9.24 若一个类的某个成员函数修饰为const,表示什么含义?若一个成员函数的某个参数修饰为const,表示什么含义? 9.25 在一个应用程序中,怎样进行static成员变量的初始化赋值? 9.26 类是创建对象的模板,一个程序中创建了许多对象,当这些对象都调用一个相同的成员函数时,系统是怎样区分当前是哪个对象调用的? 9.27 在开发一个应用系统时,应该用怎样的分析方法从现实世界中抽象出类? 9.28 类怎样体现了封装性? 9.29 以例3.16为例说明,类中的一个成员变量,是否可因为要求承担的任务太多而应该单独设计成一个类? 程序阅读和设计题: 9.30 阅读程序,给出运行结果: (1) #include \ 15 class A { private: int a,b; public : A( ) { a=b=0; cout<<\ } A(int m) { a=b=m; cout<<\ } A(int m,int n) { a=m;b=n; cout<<\ } void print( ) { cout<<\ } }; void main( ) { A a1,a2(10),a3(10,20); a1.print( ); a2.print( ); a3.print( ); } 2) #include \class point { private: int x; 16 ( static int y; public: point(int px=10) { x=px; y++; } static int getpx(point a) { return(a.x); } static int getpy(point b) { return(b.y); } void setx(int c) { x=c; } }; int point::y=0; void main() { point p[5]; for(int i=0;i<5;i++) p[i].setx(i); for (i=0;i<5;i++) { cout< } 3) #include \class sam { int x; public: 17 ( void setx(int i) { x=i; } int putx() { return x; } }; void main() { sam *p; sam s[3]; for(int i=0;i<3;i++) s[i].setx(i+4); p=s; for(i=0;i<3;i++) cout< putx()< 4) #include A(char *s) { a=new char[strlen(s)+1]; strcpy(a,s); cout< delete []a; cout<<\ } }; void main() { A x(\ 18 ( A *y=new A(\ delete y; } (5) #include A(int x=0):a(new int(x)){} ~A() {delete a;} int getA() {return *a;} void setA(int x) {*a=x;} }; void main() { A x1,x2(3); A *p=&x2; p->setA(x2.getA()+5); x1.setA(15+x1.getA());