练习题 一、填空题
1、C++控制台应用程序的上机步骤是,先通过编辑操作得到扩展名为.cpp 的源程序,再通 过 编译 操作得到扩展名为.obj的目标程序,最后通过连接操作得到扩展名为 .exe的可执行程序。 2、C++程序的三种基本结构分别是 顺序 结构、 选择 结构和 循环 结构。 3、在 C++中,switch 语句只能用于 int型 、 char型 和 枚举 类型数据。 4、当定义的 C++函数 无返回值 时,则函数类型用 void 关键字声明。在 C++程序中函数直接或间接地调用该函数自身的过程,被称为 递归调用 。 5、面向对象程序设计中的抽象的作用是 表示同一类事物的本质 。
6、为了使类中的成员不能被类外的函数通过成员操作符访问,则应把该成员的访问权限定 义为 私有的 。
7、类可以体现数据的 封装性 和 信息隐蔽 。 8、类拥有两类成员,即 数据成员 和 成员函数 。 9、如果类 A 继承自类 B,则类 A 称为 派生类 ,类 B 称为 基类 。 10、面向对象程序设计有四个主要特点: 抽象 、 继承 、 封装 和 多态性 。
11、构造函数不需要用户来调用它,而是 系统在建立对象时自动调用 。 12、析构函数的作用并不是删除对象,而是 撤销对象数据成员的存储空间 。 13、静态数据成员的初始化形式为 数据类型 类名:: 静态数据成员名=初值 。
14、在继承中由基类派生新类的过程经历了 吸收基类成员 、 调整基类成员 、 声明添加新成员 三个步骤。
15、在一个类中以另一个类的对象作为数据成员的,称为 子对象 。 16、设置虚基类的目的是 在继承间接基类时只保留一份成员 ,可通过关键字 virtual 标识虚基类。
17、从系统实现的角度看,多态性可分为两类: 静态多态性 和 动态多态性 。
二、单项选择
0、this指针知识点。
1、面向对象程序设计的英文缩写为( )。 A、OOA B、OOD C、OOT D、OOP
2、在面向对象程序设计框架中,( )是程序的基本单位。 A、对象 B、函数 C、块 D、类
3、一个 C++控制台应用程序的执行是从( )。
A、本程序的主函数开始,到本程序的最后一个函数结束。 B、本程序的第一个函数开始,到本程序的最后一个函数结束。 C、本程序的第一个函数开始,到本程序的主函数结束。 D、本程序的主函数开始,到本程序的主函数结束。
4、下列 C++数据类型所需存储空间最大的是( )。 A、long B、float C、int D、double
5、在 C++语言中,char 型数据在内存中的存储形式是( )。 A、原码 B、反码 C、补码 D、ASCII 码
6、在 C++语言中,所有的编译预处理命令均以( )开头。 A、¥ B、& C、* D、#
7、C++是通过引用运算符( )来定义一个引用的。 A、* B、<< C、-> D、& 8、( )是给对象取了一个别名,它引入对象的同义词。 A、枚举 B、结构 C、指针 D、引用
9、cin 是 C++中的标准( )。
A、输出流对象 B、控制台 C、输入函数 D、输入流对象
10、cout 是 C++中的标准( )。
A、输入流对象 B、控制台 C、输出函数 D、输出流对象
11、下列有关 C++函数的叙述错误的是( )。
A、缺省函数类型为 int 类型 B、同一个函数允许多次调用
C、函数允许直接或间接的调用自身 D、允许在主函数中定义其它函数
12、C++中,将实参的值传送给形参,形参是实参的一个拷贝,这种方式称为( )。 A、递归方式调用 B、嵌套方式调用 C、引用方式调用 D、传值方式调用
13、函数的值通过 return 语句返回,下面关于 return 语句的形式描述错误的是( )。 A、return(表达式); B、一个 return 语句只能返回一个函数值; C、return 表达式
D、一个 return 语句可以返回多个函数值
14、下列有关 C++数组的叙述错误的是( )。
A、数组元素下标从 0 开始 B、数组中的元素类型必须相同 C、数组名表示数组的首地址 D、不能对数组元素初始化
15、C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型 不相同,这些同名的函数用来实现不同的功能,这就是( )。 A、函数的重复定义 B、函数的同名覆盖 C、函数的重新定义 D、函数的重载
16、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是( )。
A、参数个数 B、参数的类型 C、函数的名称 D、函数的类型
17、在 C++中,关于下列设置默认参数值的描述中,( )是正确的。 A、默认参数不会导致副作用
B、设置默认参数值时,必须全部都设置
C、只能在函数的定义性声明中指定参数的默认值
D、在指定了默认值的参数右边,不能出现没有指定默认值的参数
18、在面向对象方法中,( )描述的是具有相似属性与操作的一组对象。 A、对象 B、代码 C、函数 D、类
19、在类定义中,说明成员的访问控制规则的 private、protected、public 可以出现的次数 ( )。
A、出现 public 至多一次 B、每种至少一次 C、每种至多一次 D、没有具体限定
20、在关键字 public 后面定义的成员为类的( )。
A、函数成员 B、私有成员 C、受保护成员 D、公有成员
21、在类外给出成员函数定义时,需在函数名前加( )。 A、什么都不加 B、类名 C、对象名:: D、类名::
22、关于成员函数特征的下述描述中,错误的是( )。
A、成员函数可以是静态的 B、成员函数可以设置默认参数 C、成员函数可以重载 D、成员函数一定是内联函数
23、在 C++中声明的具有类类型的数据称为( )。 A、局部变量 B、全局变量 C、类 D、对象
24、下列访问对象中的成员的方法中,错误的是( )。 A、通过对象名和成员运算符访问对象中的成员 B、通过指向对象的指针访问对象中的成员 C、通过对象的引用变量访问对象中成员 D、通过成员名直接访问对象中的成员
25、对象的指针,其含义是指对象空间的( )。 A、一个标志 B、值 C、名 D、起始地址
26、关于构造函数的说法,错误的是( )。
A、构造函数可以有形参 B、构造函数无函数类型
C、构造函数的功能是用来完成对象初始化 D、一个类只能有一个构造函数
27、非成员函数应声明为类的( )才能访问这个类的 private 成员。 A、构造函数 B、析构函数 C、拷贝构造函数 D、友元函数
28、一个类的友元函数或友元类能够通过成员操作符访问该类的( )。 A、私有成员 B、公有成员
C、保护成员 D、公有成员、保护成员和私有成员
29、通过 C++的( )机制,可以从现存类中构建新的类。 A、 信息隐藏 B、数据封装 C、数据抽象 D、继承与派生
30、C++中,若希望基类的公有成员在派生类中仍为公有成员,应采用( )。 A、单继承 B、私有继承 C、受保护继承 D、公有继承
31、通过派生类对象对它的基类成员中( )是可以访问的。 A、私有继承的公有成员 B、公有继承的私有成员 C、公有继承的保护成员 D、公有继承的公有成员
32、C++允许一个派生类同时继承多个基类,这种行为称为( )。 A、重复继承 B、多层派生 C、单继承 D、多重继承
33、重复继承是指( )。
A、只有一个直接基类 B、有两个直接基类
C、有两个以上直接基类 D、间接继承一个基类多次
34、建立含有对象成员的派生类对象时,自动调用构造函数的执行顺序依次为( )。 A、派生类、对象成员所属类、基类的构造函数 B、基类、派生类、对象成员所属类的构造函数 C、对象成员所属类、基类、派生类的构造函数 D、基类、对象成员所属类、派生类的构造函数
35、在 C++程序中,( )主要用来访问静态数据成员,而不能直接访问非静态成员。 A、构造函数 B、析构函数 C、虚函数 D、静态成员函数
36、设置虚基类的目的是( ) A、简化程序 B、提高运行效率 C、减少目标代码 D、消除二义性
37、编译时的多态性通常使用( )获得。
A、继承 B、虚函数 C、析构函数 D、重载函数
38、许多情况下,在基类中不能为虚函数给出一个有意义的定义,这时可将其说明为( )。 A、虚基类 B、友元函数 C、成员函数 D、纯虚函数
三、 综合应用
1、仔细分析下列 C++程序,写出执行结果: #include cout<<\"x=\"< cout<<\"x=\"< 10;3; 3;3;13 2、仔细分析下列 C++程序,按要求填空: #include int fun(int,int); //声明函数 fun。(分) int main(){ cout< int fun(int m,int n){ return m*n; } 3、仔细分析下列 C++程序,按要求填空: #include void set(int X){ x=X; } }; class B{ protected: int y; //声明整型数据成员 y (分) public: void set(int Y){ y=Y; } }; class C:public A,public B{ }; void main(){ C c1; c1.A::set(7); //设置 c1 对象的 x 为 7 (分) c1.B::set(9); //设置 c1 对象的 y 为 9 (分) } 4、仔细分析下列 C++程序,按要求填空: #include class B{ protected: int x; }; class C :public A, public B{ public: void set(int XA, int XB){ A::x=XA; //继承自 A 的 x 获取 XA 的值 (分) B::x=XB; //继承自 B 的 x 获取 XB 的值 (分) } void show(){ cout< c1.set(2, 3); c1.show(); return 0; } 5、仔细分析以下程序后,在空白处补上必要的部分使程序完整: #include class PILLAR{ protected: float wid; float hei; float len; public: PILLAR(float w,float h,float le ){ //(分) wid=w; //(2 分) hei=h; len=le; } float vol(){ return wid*hei*len; //(分) } }; class PIPE { private: PILLAR in_Pill; PILLAR out_Pill; public: PIPE(float w,float h,float le,PILLAR i,PILLAR o ):PILLAR(w,h,le),in_Pill(i),out_Pill (o){ // (分) } float vol(){ return out_Pill.vol()-in_Pill.vol(); } }; int main(){ PIPE p1(2.0f,3.0f,4.0f,5.0f, 10.0f); cout< void show(){ cout << \"基类函数 show\" << endl; } virtual void disp(){ cout << \"基类虚函数 disp\" << endl; } //(分) }; class B:public A{ public: void show(){ cout << \"派生类函数 show\" << endl; } void disp(){ cout <<\"派生类函数disp\" << endl; } //(分) }; int main(){ A *pa; pa = new B; pa->show(); // 此处执行后显示:基类函数 show pa->disp(); // 此处执行后显示:派生类函数 disp delete pa ; return 0; } 四、 问答题 1、在哪些情况下程序会执行析构函数?(分) (1)static对象在主函数结束或遇exit函数 (2)局部对象调用函数结束时,在对象释放前 (3)全局对象在程序的流程出作用域时 (4)new建立的对象,用delete释放时先调用 2、在 C++的派生类中,成员可以按访问属性划分为哪几种类型?(分)private public protected 3、虚函数的作用是什么?其使用方法是什么?(分) 虚函数的作用:在派生类中重新定义函数数体。 虚函数的使用方法:在函数类型前加virtual 五 、程 序设计 题 1、设计一个圆(CIRCLE)类,有数据成员 Radius,要求: (1)设计构造函数完成圆类对象的初始化(默认值为 1.0); (2)设计成员函数 GetArea,用于计算并返回圆的面积; (3)编写 main 函数用于程序运行实现。(共 5 分) #include CLRCLE(float r=1.0):Radius(r){} float GetArea() {return 3.14*Radius*Radius;} }; int main() {CLRCLE T(3.0); T.GetArea();//T调用面积函数 cout< #include RECT(float le=1.0,float w=1.0):lenght(le),width(w){} float GetArea(float l,float wi) {return le*wi;} }; int name() {RECT t; t.GetArea(3.4,2.5); cout< (2)重载减法运算符为点类的成员函数(或点类的友元函数),实现计算并返回任意两点之间的距离;(3 分) (3)设计 main 函数用于程序运行实现。(2 分) #include