C++复习题+答案.docx

上传人:h**** 文档编号:834923 上传时间:2018-11-02 格式:DOCX 页数:51 大小:74.29KB
下载 相关 举报
C++复习题+答案.docx_第1页
第1页 / 共51页
C++复习题+答案.docx_第2页
第2页 / 共51页
C++复习题+答案.docx_第3页
第3页 / 共51页
C++复习题+答案.docx_第4页
第4页 / 共51页
C++复习题+答案.docx_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、C+总复习题一、单项选择题1说明虚函数的关键字是( ) 。A. inline B. virtual C. define D. static2在每个 C+程序中都必须包含有这样一个函数,该函数的函数名为( ) 。A. main B. MAIN C. name D. function3cout 是某个类的标准对象的引用,该类是( ) 。A. ostream B. istream C. stdout D. stdin4如果在类外有函数调用 CPoint:func();则函数 func()是类 CPoint 的( ) 。A. 私有静态成员函数 B. 公有非静态成员函数 C. 公有静态成员函数 B. 友

2、元函数5. 如果 class 类中的所有成员在定义时都没有使用关键字 public、private 或 protected,则所有成员缺省定义为( ) 。A. public B. protected C. private Dstatic 6一个类的所有对象共享的是( ) 。A. 私有数据成员 B. 公有数据成员 C. 保护数据成员 D. 静态数据成员7动态联编所支持的多态性称为( ) 。A. 虚函数 B. 继承 C. 编译时多态性 D. 运行时多态性8定义类模板时要使用关键字( ) 。A. const B. new C. delete D. template9对虚基类的定义( ) 。A. 不需

3、要使用虚函数 B. 必须使用虚函数 C. 必须使用 privatD. 必须使用 public10类型转换函数( ) 。A. 不能带有参数 B. 只能带一个参数 C. 只能带 2 个参数 D. 只能带 3 个参数参考答案:1B 2A 3A 4C 5C 6D 7D8D 9A 10A1下面有关重载函数的描述中,正确的是( ) 。A)重载函数必须具有不同的返回值类型 B)重载函数形参个数必须不同C)重载函数必须具有不同的形参表 D)重载函数名可以不同2假定 MyCIass 为一个类,那么下列的函数说明中, ( )为该类的析构函数。A)voidMyClass(); B)MyClass(int n); C

4、)MyClass( ); D)MyClass( );3 ( )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。 A)模板 B)类 C)对象 D)函数4下面关于静态成员函数的途术中错语的是( ) 。A. 静态成员函数可以有返回值 B. this 指针可以指向静态成员函数C. 静态成员函数可以具有指针参数 D. 静态成员函数可有具有返回值类型5定义类模板时要使用关键字( ) 。A. private B. public C. delete D. template6下列是重载乘法运算符的函数原型声明,其中错误的是( ) 。A)MyClass operator*(double

5、,double); B)MyClass operator*(double,MyClass);C)MyClass operator*(MyClass,double); D)MyClass operator*(MyClass,MyClass);7以下( )成员函数表示纯虚函数。A)virtual int fun(int) B)void fun(int)=0 C)virtual void fun()=0 D)virtual void fun(int)8关于纯虚函数,下列表述中正确的是( ) 。A)纯虚函数的声明总是以“=0“结束 B)含有纯虚函数的类可以定义对象C)含有纯虚函数的类是抽象类 D)上面

6、都是错误的 9 ( )解决二义性问题。A. 只能使用作用域分辨操作符 B. 只能使用虚基类C. 使用作用域分辨操作符或虚基类 D. 上面都不能10实现编译时的多态性要使用( ) 。A)重载函数 B)析构函数 C)构造函数 D)虚函数参考答案:1C 2D 3A 4B 5D 6A 7C8C 9C 10A1下列关于 C+函数的说明中,正确的是( ) 。A)内联函数就是定义在另一个函数体内部的函数 B)函数体的最后一条语句必须是return 语句C)调用一个函数之前,如果还没有定义这个函数,必须先声明其原型D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式2假定 MyCIass 为一个类

7、,那么下列的函数说明中, ( )为该类的无参构造函数。A)void MyClass(); B)MyClass(int n); C)MyClass( ); D)MyClass( );3下列叙述中,错误的是( ) 。A)派生类可以使用 private 派生 B)对基类成员的访问必须是无二义性的C)基类成员的访问能力在派生类中维持不变 D)赋值兼容规则也适用于多继承的组合4当一个类的某个函数被说明为 virtual 时,该函数在该类及其所有派生类中( ) 。A. 都是虚函数 B. 只有被重新说明为 vittual 时才是虚函数 C. 都不是虚函数 D. 上面都不正确 5派生类的构造函数的成员初始化表

8、中,不能包含( ) 。A)基类的构造函数 B)派生类中子对象的初始化 C)基类中子对象的初始化 D)派生类中一般数据成员的初始化6下列是重载加法运算符的函数原型声明,其中错误的是( ) 。A)MyClass operator+(double,double); B)MyClass operator+(double,MyClass);C)MyClass operator+(MyClass,double); D)MyClass operator+(MyClass,MyClass);7派生类中的成员不能直接访问基类中的( )成员。A)public B)private C)virtual D)prote

9、cted8实现运行时的多态性要使用() 。A )重载函数 B)析构函数 C)构造函数 D)虚函数9如果在类 MyClass 的外面使用函数调用 MyClass:f();则函数 f()是类 MyClass 的( ) 。A. 静态成员函数 B. 非静态成员函数 C. 友元函数 D. 前面都不正确10由于常对象不能被更新,因此( ) 。A)通过常对象只能调用它的常成员函数 B)通过常对象只能调用静态成员函数C)常对象的成员都是常成员 D)通过常对象可以调用任何不改变对象值的成员函数参考答案:1C 2C 3C 4A 5C6A 7B 8D 9A10A1下列对类的构造函数和析构函数描述正确的是( ) 。A

10、)构造函数可以重载,析构函数不能重载 B)构造函数不能重载,析构函数可以重载C)构造函数可以重载,析构函数可以重载 D)构造函数不能重载,析构函数不能重载2在函数定义前加上关键字“inline” ,表示该函数被定义为( ) 。A)重载函数 B)内联函数 C)成员函数 D)普通函数3下面有关重载函数的说明中, ( )是正确的。A) 重载函数必须具有不同的返回值类型 B) 重载函数形参个数必须不同C) 重载函数必须具有不同的形参列表 D) 重载函数名可以不同4下列有关类与对象的说法中,( ) 是不正确的。A) 对象是类的一个实列 B) 任何一个对象只能属于一个具体的类C) 一个类只能有一个对象 D

11、) 类和对象的关糸和数椐类型与变量的关糸类似5已知: Print( )函数是一个类的常成员函数,它无返回值,下列表示中,正确的是 ( )。A)void Print( ) const; B) const void Print( ); C) void const Print( ); D) void Print(const)6假定 Myclass 为一个类,那么下列的函数说明中 ( )为该类的析构函数。A) void Myclass( ); B) Myclass( int n); C) Myclass( ); D) Myclass( )7下面类的定义中有 ( ) 处错误。 class myclass

12、int i=0;public:void myclass( );myclass(value); ; A) 1 B)2 C)3 D)48说明虚函数的关键字是( ) 。A. inline B. virtual C. define D. static9cout 是某个类的标准对象的引用,该类是() 。 A. ostream B. istream C. stdout D. stdin10如果 class 类中的所有成员在定义时都没有使用关键字 public、private 或 protected,则所有成员缺省定义为( ) 。 A. public B. protected C. private Dsta

13、tic 11定义类模板时要使用关键字( ) 。 A. const B. new C. delete D. template12 一个类的所有对象共享的是( ) 。A. 私有数据成员 B. 公有数据成员 C. 保护数据成员 D. 静态数据成员13静态成员函数没有( ) 。A. 返回值 B. this 指针 C. 指针参数 D. 返回类型14解决多重继承中二义性问题的方法有( ) 。 A. 只能使用作用域分辨操作符 B. 使用作用域分辨操作符或赋值兼容规则C. 使用作用域分辨操作符或虚基类 D. 使用虚基类或赋值兼容规则15如果在类 CTest 的外面函数调用 CTest:f( );则函数 f(

14、)是类 CTest 的( ) 。A. 静态成员函数 B. 非静态成员函数 C. 友元函数 D. 前面都不正确参考答案:1A)2 B)3C) 4C ) 5A)6 D)7C)8B)9A) 10C) 11D)12D)13B) 14C) 15A)1类的析构函数的作用是( )。A) 作为类的一般成员函数 B) 类的初始化 C) 对象的初始化 D) 对象的删除2一 个 类 的 友 元 函 数 或 友 元 类 可 以 访 问 该 类 的( )。 A) 私 有 成 员 B) 保 护 成 员 C) 公 有 成员 D) 所 有 成 员3下列关于成员函数特征的描述中,( ) 是错误的。 A) 成员函数一定是内联函数

15、 B) 成员函数可以重载C) 成员函数可以设置参数的默认值 D) 成员函数可以是静态的4下列函数中,( ) 不是类的成员函数。A) 构造函数 B) 析构函数 C) 友元函数 D) 拷贝构造函数 5下列对派生类的描述中,( ) 是错误的。 A) 一个派生类可以作为另一个派生类的基类B) 派生类至少有一个基类 C) 派生类的成员除了它自己的成员外, 还包含了它的基类的成员 D) 派生类中继承的基类成员的访问权限到派生类中保持不变 6下列的描述中,( ) 是错误的。A) 公有继承时基类中的 public 成员在派生类中仍是 public 的B) 公有继承时基类中的 private 成员在派生类中仍是

16、 private 的C) 公有继承时基类中的 protected 成员在派生类中仍是 protected 的D) 私有继承时基类中的 public 成员在派生类中仍是 private 的 7下列虚基类的声明中正确的是( )。A) class virtual B: public A B) virtual class B: public AC) class B: public A virtual D) class B: virtual public A 8若类 A 和类 B 的定义如下:class A int i, j; public: A(int m, int n): i(m), j(n) in

17、t Geti() return i; ;class B: public A int k; public: B(int m, int n, int u): A(m, n), k(u) void Make() k = i * j; ;int main() B b(1, 2, 3);return 0;则上述定义中,( ) 是非法的表达式.A) k=i*j; B) int k; C) return i; D) void Make( ) 9若有以下程序:#include using namespace std;class A public: int a; A() a =10; ; class A1: p

18、ublic A1 public: A1() a = a + 1; ; class A2: public A public: A2() a = a + 2; ; class B: public A1, public A2 public: B() void Print() cout str; 执行时,从键盘输入:Microsoft Visual Studio 6.0!所得的结果是 str=( ) 。A. Microsoft Visual Studio 6.0! B. MicrosoftC. Microsoft Visual D. Microsoft Visual Studio 6.04、考虑下面的

19、函数原型声明:void testDefaulParam(int a,int b=7,char z=*);下面函数调用中,不合法的是( ) 。A. testDefaulParam(5); B. testDefaulParam(5,8); C. testDefaulParam(5,#); D. testDefaulParam(0,0,*);5、下列语句中,将函数 int sum(int x, int y)正确重载的是( ) 。A. float sum(int x, int y); B. int sum(int a, int b);C. float sum(float x, float y); D.

20、 double sum(int y, int x);6、下列表示引用的方法中, ( )是正确的。已知:int a=1000;A. int B. char C. int D. float 7、在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用( ) 。A. 内联函数 B. 重载函数 C. 递归调用 D. 嵌套调用8、下列有关 C+类的说法中,不正确的是( ) 。A. 类是一种用户自定义的数据类型B. 只有类中的成员函数或类的友元函数才能存取类中的私有成员C. 在类中,如果不做特别说明,所有成员的访问权限均为私有的D. 在类中,如果不做特别说明,所有成员的访问权限均为公

21、用的9、已知 X 类,则当程序执行到语句: X array3;时,调用了( )次构造函数。A. 0 B. 1 C. 2 D. 310、下面说法中,正确的是( )A. 一个类只能定义一个构造函数,但可以定义多个析构函数B. 一个类只能定义一个析构函数,但可以定义多个构造函数C. 构造函数与析构函数同名,只要名字前加了一个求反符号()D. 构造函数可以指定返回类型,而析构函数不能指定任何返回类型,即使是 void 类型也不可以11、已知:print( )函数是一个类的常成员函数,它无返回值,下列表示中, ( )是正确的。A. void print( ) const; B. const void p

22、rint( ); C. void const print( ); D. void print(const);12、下面描述中,表达错误的是( ) A. 公用继承时基类中的 public 成员在派生类中仍是 public 的B. 公用继承时基类中的 private 成员在派生类中仍是 private 的C. 公用继承时基类中的 protected 成员在派生类中仍是 protected 的D. 私有继承时基类中的 public 成员在派生类中是 private 的13、设置虚基类的目的是( ) 。A. 简化程序 B. 消除二义性 C. 提高运行效率 D. 减少目标代码14、下面( )的叙述不符合

23、赋值兼容规则。A. 派生类的对象可以赋值给基类的对象 B. 基类的对象可以赋值给派生类的对象C. 派生类的对象可以初始化基类的对象 D. 派生类的对象的地址可以赋值给指向基类的指针15、关于虚函数的描述中, ( )是正确的。A. 虚函数是一个 static 类型的成员函数 B. 虚函数是一个非成员函数C. 基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数D. 派生类的虚函数与基类的虚函数具有不同的参数个数和类型16、下面关于友元的描述中,错误的是( ) 。A. 友元函数可以访问该类的私有数据成员B. 一个类的友元类中的成员函数都是这个类的友元函数C. 友元可以提高程序的运行效率

24、D. 类与类之间的友元关系可以继承17、下列关于静态数据成员的说法,不正确的是( ) 。A. 类中定义的公用静态数据成员,可以通过类的对象来访问B. 类中定义的所有静态数据成员,都必须在类外初始化C. 静态数据成员不是所有对象所共用的 D. 普通的成员函数可以直接访问类中的静态数据成员18、如果表达式+i*k 中的“ +”和“*”都是重载的友元运算符,若采用运算符函数调用格式,则表达式还可以表示为( ) 。A. operator*(i.operator+(),k) B. operator*(operator+(i),k)C. i.operator+().operator*(k) D. k.op

25、erator*(operator+(i)19、下面对模板的声明,正确的是( ) 。A. template B. template C. template D. template20、下列的各类函数中, ( )不是类的成员函数A. 构造函数 B. 析构函数 C. 友元函数 D. 复制构造函数参考答案:1-5C D B C C 6-10A A D D B 11-15A B B B C 16-20 D C B C C1、关于 C+与 C 语言关系的描述中, ( )是错误的。AC 语言是 C+语言的一个子集 BC 语言与 C+语言是兼容的CC+语言对 C 语言进行了一些改进 DC+语言和 C 语言都是

26、面向对象的2、已知:int m=10; 下列表示引用的方法中, ( )是正确的。Aint Bint Cint Dfloat 3、考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z=*);下面函数调用中,不合法的是( ) 。AtestDefaulParam(5); BtestDefaulParam(5,8); CtestDefaulParam(5,#); DtestDefaulParam(0,0,*);4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是( ) 。A函数的返回值类型 B参数的类型 C

27、函数名称 D参数个数5、下列有关 C+类的说法中,不正确的是( ) 。A类是一种用户自定义的数据类型B只有类中的成员函数或类的友元函数才能存取类中的私有成员C在类中,如果不做特别说明,所有成员的访问权限均为私有的D在类中,如果不做特别说明,所有成员的访问权限均为公用的6、已知 X 类,则当程序执行到语句 X array3;时,调用了( )次构造函数。A0 B1 C2 D37、有关析构函数的说法,不正确的是( ) 。A析构函数有且仅有一个 B析构函数和构造函数一样可以有形参C析构函数的功能是在系统释放对象之前作一些内存清理工作D析构函数无任何函数类型8、类定义的内容允许被其对象无限制地存取的是(

28、 ) 。Aprivate 部分 B protected 部分 Cpublic 部分 D以上都不对9、关于常数据成员的说法,不正确的是( ) 。A常数据成员的定义形式与一般常变量的定义形式相同,只不过常数据成员的定义必须出现在类体中B常数据成员必须进行初始化,并且不能被更新C常数据成员通过构造函数的成员初始化列表进行初始化D常数据成员可以在定义时直接初始化10、运用运算符 delete 删除一个动态对象时( ) 。A系统首先为该动态对象调用构造函数,再释放其占用的内存B系统首先释放该动态对象占用的内存,再为其调用构造函数C系统首先为该动态对象调用析构函数,再释放其占用的内存D系统首先释放动态对象

29、占用的内存,再为其调用析构函数11、可以在类外用 p.a 的形式访问派生类对象 p 的基类成员 a,其中 a 是( ) 。A私有继承的公用成员 B公用继承的私有成员C公用继承的保护成员 D公用继承的公用成员12、在公用继承方式下,有关派生类对象和基类对象的关系,不正确的叙述是( ) 。A派生类的对象可以赋给基类的对象 B派生类的对象可以初始化基类的引用C派生类的对象可以直接访问基类中的成员 D派生类的对象的地址可以赋给指向基类的指针13、设置虚基类的目的是( ) 。A简化程序 B消除二义性 C提高运行效率 D减少目标代码14、在 C+中,用于实现动态多态性的是( ) 。A内联函数 B重载函数

30、C模板函数 D虚函数15、不能说明为虚函数的是( ) 。A 析构函数 B构造函数 C类的成员函数 D以上都不对16、如果一个类至少有一个纯虚函数,那么就称该类为( ) 。A抽象类 B派生类 C纯基类 D以上都不对17、下面关于友元的描述中,错误的是( ) 。A友元函数可以访问该类的私有数据成员B一个类的友元类中的成员函数都是这个类的友元函数C友元可以提高程序的运行效率D类与类之间的友元关系可以继承18、下列运算符中, ( )运算符在 C+中不能被重载。ABCSample();public:CCSample(int val);D CSample();11、在 int a=3,int *p=16、

31、执行下面的程序将输出( ) #include class BASEchar c;public:BASE(char n):c(n)virtual BASE()coutc;class DERIVED:public BASE char c; public: DERIVED(char n):BASE(n+1),c(n)DERIVED()coutc; int main() DERIVED a(X); return 0; (A)XY (B)YX (C)X (D)Y下面描述中,表达错误的是( ) (A)公有继承时基类中的 public 成员在派生类中仍是 public 的(B)公有继承是基类中的 private 成员在派生类中仍是 private 的 (C)公有继承时基类中的 protected 成员在派生类中仍是 protected 的 (D)私有继承时基类中的 public 成员在派生类中是 private 的18、定义析构函数时,应该注意( ) (A)其名与类名完全相同 (B)返回类型是 void 类型 (C)无形参,也不可重载 (D)函数体中必须有 delete 语句

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 参考答案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。