logo资料库

c++期末复习题.doc

第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
资料共24页,剩余部分请下载后查看
一 选择题(共 45题)
二 填空题(共 33题)
三 写出下列程序的运行结果
4.
5.
6.
7.
8.
9.
11.
13.
14.
15.
16.
17.
#include
class BB
{ int a,b;
public:
BB(int i=0,int j=1) { a=i; b=j;}
BB operator +(BB c) { BB d; d.a=a + c.a; d.b
BB operator -(BB c) { BB d; d.a=a - c.a; d.b
void show()
{cout<<'('<
};
void main()
{ BB x(10,15),y(5,7),z;
z=x+y;z.show();z=x-y;z.show();
}
18.
19.
四 程序
1.声明一个哺乳动物Mammal类,再由此派生出狗Dog类,声明一个Dog类的对象,观察基类与派生类的构
2.定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加
3.建立一个基类Building ,用来存储一座楼房的层数、房间数以及它的总平方英尺数。建立派生类Hou
4.声明一个Shape基类,在此基础上派生出Rectangle(矩形)类和Circle(圆)类,二者都有
5.分别用成员函数和友元函数重载运算符,使对实型的运算符=、+、-、*、/ 适用于复数运算。用友元成员函
6.编写出程序,计算两点之间的距离。
7.定义盒子Box类,要求具有以下成员:可设置盒子形状;可计算盒子体积;可计算盒子的表面积。#inclu
8.定义计数器类Counter。要求具有以下成员:计数器值;可进行增值和减值记数;可提供记数值。
9.编写一个程序计算两个给定的长方形的周长和面积。
10.编写一个程序,采用一个类求n!,并输出10!的值。
11.定义一个日期类date,它有三个私有数据成员:年、月、日和若干个成员函数,并实现如下要求:
12.定义Point类,有数据成员X和Y,重载++和--运算符,要求同时重载前缀方式和后缀方式。
13.定义一个字符串onestr,包含一个存放字符串的成员变量,能够通过构造函数初始化字符串,通过成员函数
14.建立一个基类Building ,用来存储一座楼房的层数、房间数以及它的总平方英尺数。建立派生类Hou
15.有一正方体形环,其中小正方形连长为5,大正方形连长为10。编程定义一个square类,求正方体形环面
16.定义应用抽象类(base),求圆(circle)和圆外切正方形(outcircle)的面积和周长。
17.利用一个二进制文件保存10个100以内的整数(数据用键盘输入)。
一 选择题(共 45 题) 1.对类的构造函数和析构函数描述正确的是( )。 A. 构造函数可以重载,析构函数不能重载 √ B. 构造函数不能重载,析构函数可以重载 C. 构造函数可以重载,析构函数也可以重载 D. 构造函数不能重载,析构函数也不能重载 2.继承具有( 动继承间接基类的成员。 ),即当基类本身也是某一个类派生类时,底层的派生类也会自 A)规律性 B.传递性√ C.重复性 D.多样性 3.假设 OneClass 为一个类,则该类的复制初始化构造函数的声明语句为( )。 A.OneClass(OneClass C. OneClass(OneClass & p); √ p); B. OneClass& (OneClass p ); D. OneClass (OneClass * p); 4.对于结构中定义的成员,其默认的访问权限为( )。 A.public B. protected C.private D. static 5.下面对静态数据成员的描述中,不正确的是( )。 A.静态数据成员可以在类体内进行初始化√ B.静态数据成员不可以在类体内进行初始化 C.静态数据成员能受 private 控制符的作用 D.静态数据成员调用前必须初始 6. C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种 是通过( A.复用 )派生了新的类。 B.继承 √ C.封装 D.引用 7. 假定 AA 为一个类,a 为该类公有的数据成员,x 为该类的一个对象,则访问 x 对象中数 据成员 a 的格式为( )。 A. x(a) C. x->a 9. 对于一个类的构造函数,其函数名与类名( B. x[a] D. x.a √ )。 A. 完全相同 √ B. 基本相同 C. 不相同 D. 无关系 10. 一个类的构造函数通常被定义为该类的( )成员。 A. 公有 √ B. 保护 C. 私有 D. 友元 11. 一个类的析构函数通常被定义为该类的( )成员。 A. 私有 B. 保护 C. 公有 √ D. 友元 12. 一个类的静态数据成员所表示属性 ( A. 是类的或对象的属性 )。 B. 只是对象的属性 C. 只是类的属性 √ D. 类和友元的属性 13.类的析构函数的作用是( )。 A.一般成员函数 B.类的初始化 C.对象初始化 D.删除对象之前的善后工作√ 14.下列对基类和派生类关系的描述中,错误的是( )。 A.派生类是基类的具体化 C.派生类是基类定义的延续 B.派生类是基类的子集√ D.派生类是基类的组合 15.下列对派生类的描述中,错误的是( )。 A.一个派生类可以作为另一个派生类的基类 B.派生类至少有一个基类 C.派生类的缺省继承方式是 private D.派生类只继承了基类的公有成员和保护成员√
16.下列对继承的描述中,错误的是( )。 A.析构函数不能被继承 B.派生类也是基类的组合 C.派生类的成员除了它自己的成员外,还包含了它的基类的成员 D.派生类中继承的基类成员的访问权限到派生类保持不变√ 17.派生类的对象对它的基类成员中( A.公有继承的公有成员√ C.公有继承的保护成员 18.下列说法错误的是( )。 )是可以访问的。 B.公有继承的私有成员 D.私有继承的公有成员 A.公有继承的基类中的 public 成员在派生类中仍是 public 的 B.公有继承的基类中的 private 成员在派生类中仍是 private 的√ C.私有继承的基类中的 public 成员在派生类中仍是 private 的 D.保护继承的基类中的 public 成员在派生类中仍是 protected 的 19.下面叙述错误的是( )。 A.基类的 protected 成员在派生类中仍然是 protected√ B.基类的 protected 成员在 public 派生类中仍然是 protected 的 C.基类的 protected 成员在 private 派生类中是 private 的 D.基类的 protected 成员不能被派生类的对象访问 20.设置虚基类的声明中,正确的是( )。 A.简化程序 B.消除二义性√ C.提高运行效率 D.减少目标代码 21.关于虚函数的描述中,正确的是()。 A.虚函数是一个静态成员函数 B.虚函数是一个非成员函数 C.虚函数即可以在函数说明定义,也可以在函数实现时定义 D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型√ 22.下列描述中,( )是抽象类的特征。 A.可以说明虚函数 C.可以定义友元函数 D.不能说明其对象√ B.可以进行构造函数重载 23. 静态数据成员的初始化是在( )中进行的。 A. 构造函数 C. 所属类 B. 任何成员函数 D. 全局区√ 24. 当将一个类 A 或函数 f()说明为另一个类 B 的友元后,类 A 或函数 f()能够直接访问类 B 的( )。 A. 只能是公有成员 C. 只能是除私有成员之外的任何成员 B. 只能是保护成员 D. 具有任何权限的成员√ 25. 在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( )。 A. 作为友元函数重载的 1 元运算符 C. 作为友元函数重载的 2 元运算符 B. 作为成员函数重载的 1 元运算符√ D. 作为成员函数重载的 2 元运算符 26. 关于运算符重载,下列说法正确的是( )。 A. 重载时,运算符的优先级可以改变。 B. 重载时,运算符的结合性可以改变。 C. 重载时,运算符的功能可以改变。√ D. 重载时,运算符的操作数个数可以改变。
27. 从一个基类派生出的各个类的对象之间( )。 A. 共享所有数据成员,每个对象还包含基类的所有属性 B. 共享部分数据成员,每个对象还包含基类的所有属性 C. 不共享任何数据成员,但每个对象还包含基类的所有属性 D. 共享部分数据成员和函数成员√ 28. C++的继承性允许派生类继承基类的( )。 A. 部分特性,并允许增加新的特性或重定义基类的特性√ B. 部分特性,但不允许增加新的特性或重定义基类的特性 C. 所有特性,并允许增加新的特性或重定义基类的特性 D. 所有特性,但不允许增加新的特性或重定义基类的特性 29. 派生类的成员函数可以直接访问基类的( )成员。 A. 所有 B. 公有和保护 √ C. 保护和私有 D. 私有 30. 当派生类中有和基类一样名字的成员时,一般来说,( )。 A. 将产生二义性 C. 是不能允许的 B. 派生类的同名成员将覆盖基类的成员√ D. 基类的同名成员将覆盖派生类的成员 31.关于纯虚函数和抽象类的描述中,错误的是( )。 A.纯虚函数是一种特殊的虚函数,它没有具体的实现 B.抽象类是指具体纯虚函数的类 C.一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类√ D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 32.如果一个类至少有一个纯虚函数,那么就称该类为( )。 C.派生类 D.以上都不对 A.抽象类√ B.虚函数 33.要实现动态联编,必须通过( )调用虚函数。 A.对象指针 √ B.成员名限定 C.对象名 D.派生类名 34.以下( )成员函数表示虚函数。 A.virtual int vf(int); C.virtual void vf()=0; B.void vf(int)=0; D.virtual void vf(int) { }; √ 40.下面描述中,正确的是( )。 A.virtual 可以用来声明虚函数√ B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类 C.即使基类的构造函数没有参数,派生类也必须建立构造函数 D.静态数据成员可以通过成员初始化列表来初始化 35. 在成员函数中进行双目运算符重载时,其参数表中应带有( )个参数。 A. 0 B. 1 √ C. 2 D. 3 36. 在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是( )。 A. 该运算符是一个单目运算符。 C. 该运算符函数是类的成员函数。 B. 该运算符函数有一个隐含的参数 this。 D. 该运算符函数是类的友元函数。√ 37. 下面对于友元函数描述正确的是( )。 A.友元函数的实现必须在类的内部定义 B.友元函数是类的成员 C.友元函数破坏了类的封装性和隐藏性√ D.友元函数不能访问类的私有成员 38.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该当成员的 访问权限定义为( )。
A.public √ B.protected C.private D.ststic 39.下面对静态数据成员的描述中,正确的是( )。 A.静态数据成员是类的所有对象共享的数据√ B.类的每一个对象都有自己的静态数据成员 C.类的不同对象有不同的静态数据成员值 D.静态数据成员不能通过类的对象调用 40.C++类体系中,不能被派生类继承的有( )。 A.构造函数 √ B.虚函数 C.静态成员函数 D.赋值操作函数 41 下列虚基类的声明中,正确的是( )。 A.class virtual B:public A C.class B:public A virtual B.virtual class B:public A D.class B: virtual public A √ 42 在下面的表达式中,不表示虚继承的是( )。 A.virtual public C.public √ D. virtual 43.下列关于动态联编的描述中,错误的是( )。 B.public virtual A.动态联编是以虚函数为基础 B.动态联编是运行时确定所调用的函数代码的 C.动态联编调用函数操作是指向对象的指针或对象引用 D.动态联编是在编译时确定操作函数的√ 44.下面 4 个选项中,( )是用来声明虚函数的。 A.virtual √ B.public 45.编译时的多态性可以通过使用( A.虚函数和指针 √ C.虚函数和对象 C.using )获得。 D.false A B.重载函数和析构函数 D.虚函数和引用 分配内存。 二 填空题(共 33 题) 1.重载插入运算符<<时,其运算符函数的返回值类型应当是 ostream &。 2.派生类可以定义其基类 中不具备的数据和操作。 3.对象将其大部分实现细节隐藏起来,这种机制称为 封闭。 4.建立类和类的对象时,系统对类 不分配内存,系统对对象 5.基类和派生类的关系称为继承和派生。 6.当保护继承时,基类的公有或保护 成员在派生类中成为保护成员,派生类对象不能直接 访问基类的任何 成员。 7. C++支持两种多态性:编译 时的多态性(重载)和运行 时的多态性(虚函数)。、 8.在 C++中定义类时,通常是利用变量 描述对象的“特征”; 利用函数 描述对象的“行 为”。 9.假定用户为类 AB 定义了一个构造函数"AB(int aa,char*bb=NULL):a(aa),b(bb){}”,则 该类中至少包含有 2 个数据成员。 10.类是对象的抽象 ;而对象则是类的具体实例。 11.如果不做特殊说明,类成员的默认访问权限是私有 ; 结构成员的默认访问权限是公有。 12.在定义对象的同时初始化其成员变量,需要利用构造函数,用于初始化变量的值可以是 固定的常量,也可以通过参数 获得。 13.在私有继承关系下,基类的公有成员和保护成员将成为派生类中的私有成员,它们只能 由派生类的成员函数来访问;基类的私有成员将成为派生类中的不可访问的成员。 14. 在保护继承中,基类中的公有成员、保护成员是可见的。
15.面向对象方法构造的系统,其基本单位是对象 。 16.生成一个派生类对象时,先调用基类的构造函数,然后调用派生类的构造函数。 17.AA operator +(AA x )表示为运算符+重载。 18.若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名 前必须加上类名 和两个冒号分隔符。 19.若采用 x.abc(y)表达式调用一个成员函数,在成员函数中使用的*this 就代表了类外的 x 对象。 20.假定用户没有给一个名为 AB 的类定义析构函数,则系统为其定义的析构函数为~AB(){}。 21.类的成员按访问权限可分为三类: 公有 、私有、保护。 22.在一个类中定义复制构造函数的目的,是为了当利用该类的一个对象初始化另一个对象 时,能够避免这两个对象的同一指针同时指向同一块 地址 。 23. 假定 AB 为一个类,则执行“AB a[10];”语句时,系统自动调用该类构造函数的次数 为 10。 24. 假定要把 aa 定义为 AB 类中的一个常量整数型数据成员,则定义语句为 const int aa;。 25.假定 AB 为一个类,则该类的复制构造函数的函数头为 AB(AB & 26.假定 AB 为一个类,该类中含有一个指向动态数组空间的指针成员 pa,则在该类的析构 函数中应该包含有一条 delete pa 语句。 27. 静态成员函数只能访问类的静态数据成员,非静态成员函数 访问类的非静态数据成员。 28. 一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加 上 friend 的限定。 29. 一个单目运算符作为类的成员函数重载时有 0 个参数;如果作为友元函数重载,则有 1 个参数。 30. 若多个基类及其派生类中都定义了同名函数成员,要访问相应函数时,就需要在函数名 前加上基类名和类区分符。 31. 若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以 virtual 的方式直接继承它。 32. 引进虚基类的根本目的是为了消除二义性。 )。 33. 在每个成员函数中,隐含的第一个参数的参数名为 this 指针。 三 写出下列程序的运行结果 1. #include #include class A { char a; public: A(char *s) { a=new char[strlen(s)+1]; strcpy(a,s); cout<
A y( "Zhang"); } 2. #include int n=0; class A { int a; public: A(int aa=0) {a=aa; n++;} ~A() void show() {n--;cout< class A { int a,b; public: A( ) {a=b=0;cout< class BB { public: int a,b; { a=i; b=j;} d.b=b+c.b*10; BB(int i=0,int j=1) BB operator +(BB c) { BB d; d.a=a + c.a*10; return d;} BB operator -(BB c) { BB d; d.a=a * c.a; d.b=b*c.b;
return d;} void show() {cout<<'('< class EX { intx,y; public: { x=i; y=j;} EX(int i=0,int j=1) EX operator * (EX z) { EX d; d.x=x *z.x; return d;} d.y=y*z.y; EX operator /(EX c) { EX d; d.x=x-c.x; return d;} d.y=y-c.y; void show() {cout<<'('< class Point{ int x,y; public: Point(){x=1;y=1;} ~Point(){cout<<"Point "<
} 7. #include class EX1 { int a,b; public: EX1 ( ) {a=b=1; cout< #include class Csample { int i; public: cout <<"constructor 1 " < class Csample { private:
分享到:
收藏