加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C++试题讲解(一)选择题

(2008-07-02 20:15:41)
标签:

常量

指针

函数

作用域

c

面向对象

程序设计

it

分类: C 程序设计

C++试题讲解(一)

平均分20.8,4个大题中得分率最高,为69%

一.选择题(共30分,每小题1分):每题只有一个正确选项,题项中的“         ”是选项需要填写内容的地方,但正确选择必须填写序号后面的“(           )”内才能得分。

注:请注意题目要求,不要把题目填写在空格上。(有两位同学因为填写错误,选择题得了0分)

 

1.    下列的各类函数中,           不是类的成员函数。    (   

A) 构造函数    B) 析构函数      C) 友元函数      D) 拷贝初始化构造函数

注:可做友元的函数有普通函数和其它类的函数,所以不是本类内的成员函数。

 

2.    作用域运算符“::”的功能是           。         ( 

A) 标识作用域的级别的       B) 指出作用域的范围的      
C) 给定作用域的大小的       D) 标识成员是属于哪个类的

注: “::”左边一般为类名,右边一般为成员变量和成员函数,它的功能就是标识是属于哪个类的;如果左边什么都不加,表示全局变量。

 

3.    下列选项中,           是不正确的。              (  

A) 名空间是为了支持大规模程序的逻辑设计、排解名字冲突应运而生的

B) 名空间定义的关键词为typename C) 名空间定义的关键词为namespace

D) 因为程序是跨文件的,所以名空间也是跨文件的

 

4.               是析构函数的特征。            (  

A) 一个类中只能定义一个析构函数 B) 析构函数名与类名不同

C) 析构函数的定义只能在类体内            D) 析构函数可以有一个或多个参数

 

5.    下述静态数据成员的特性中,           是错误的。    ( 

A) 说明静态数据成员时前边要加修饰符static   

B) 静态数据成员要在类体外进行初始化

C) 引用静态数据成员时,要在静态数据成员前加<类名>和作用域运算符

D) 静态数据成员不是所有对象所共用的

注:静态成员都是隶属于类的,是所有同类对象共享的

 

6.    已知fl(int)是类A的公有成员函数,P是指向成员函数f1()的指针,采用           是正确的。(   

A) p=fl;     B) P=A::f1;      C) P=A::fl();     D) P=f1();

注:指向普通函数的指针  int max(int a, int b){…}   int (*p)(int, int);    p=max;

指向类中公有函数的指针的赋值与上相同 指针名=类名::函数名,即 p=A::max;

 

7.    友元关系不能              (   

A) 是类是与类的关系           B) 是一个类成员函数与另一个类的关系

C) 继承                            D) 提高程序的运行效率

注:友元关系可是一个类与另一个类的关系,也可以是一个类成员函数与另一个类的关系;利用友元的主要目的是提高程序的运行效率,通过友元访问类的私有数据(如同生活中通过人际关系得到内部消息或受益等)。

       友元关系是不继承的。例:刘鹏是黄涛的朋友,可以分享黄涛的小秘密,但刘鹏不一定是黄小涛(假如黄小涛是黄涛的儿子)的朋友,不一定能分享黄涛儿子的小秘密。

 

8.    下列关于对象数组的描述中,           是错的。 (  

A) 对象数组的下标是从0开始的            B) 对象数组的数组名是一个常量指针

C) 对象数组的每个元素是同一个类的对象  

D) 对象数组只能赋初值,而不能被赋值

 

9.    下列说明中 const char *ptr;   ptr应该是                 (  C )

A) 指向字符常量的指针       B) 指向字符的常量指针      

C) 指向字符串常量的指针   D) 指向字符串的常量指针

注:使用const修饰指针时,由于const的位置不同,而含意不同。

下面定义的一个指向字符串的常量指针

char * const prt1 = stringprt1;  //注意const位置

// prt1只能指向stringprt1字符串,指针是常量,而字符串stringprt1的字符串可以修改

其中,ptr1是一个常量指针。因此,下面赋值是非法的。

ptr1 = stringprt2;

而下面的赋值是合法的:

*ptr1 = "m";

因为指针ptr1所指向的变量是可以更新的,不可更新的是常量指针ptr1所指的方向(别的字符串)。

 

下面定义了一个指向字符串常量的指针

const char* ptr2 = stringprt1; //const写在前面,字符串是常量,指针不是常量

其中,ptr2是一个指向字符串常量的指针。ptr2所指向的字符串不能更新的,而ptr2是可以更新的。因此,

*ptr2 = "x";

是非法的,而:  ptr2 = stringptr2;   是合法的。

 

10.  已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,           是正确的。       ( 

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

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

 

11.  关于new运算符的下列描述中,           是错的。   (  

A) 它可以用来动态创建对象和对象数组      

B) 使用它创建的对象或对象数组可以使用运算符delete删除

C) 使用它创建对象时要调用构造函数   

D) 使用它创建对象数组时必须指定初始值

注:用new创建对象数组时会自动调用无参的构造函数(或者有缺省值的构造函数)  例: Point *p = new Point[10];    会调用10次无参的构造函数

 

12.  具有转换函数功能的构造函数,应该是           。    ( 

A) 不带参数的构造函数              B)带有一个参数的构造函数

C) 带有两个以上参数的构造函数     D) 缺省构造函数

注:构造函数可以将普通类型转换为对象

#include

#include

using namespace std;

 

class Example

{

public:

       Example(int va=0);

       void print();

private:

       int a;

};

 

Example::Example(int va)

    cout<<"Example(int va)..."<< a="va;">

 

void Example::print()

{ cout<<"a="<<>

 

void main()

{

       Example ee; //调用无参构造函数或者有缺省值的构造函数

       ee = 3;   // 调用带有一个整型参数的构造函数

       ee.print();

}

程序运行结果:

Example(int va)...

Example(int va)...

a=3

 大家可以思考一下,析构函数调用了几次,分别在什么时候调用。

 

13.  下列对派生类的描述中,           是错的      (   

A) 一个派生类可以作另一派生类的基类       B) 派生类至少有一个基类

C) 派生类的成员除了它自己的成员外,还包含了它的基类的成员

D) 派生类中继承的基类成员的访问权限到派生类中保持不变

 

14.  派生类的构造函数的成员初始化列表中,不能包含             (  

A) 基类的构造函数                      B) 派生类中子对象的初始化     

C) 派生类中一般数据成员的初始化       D) 基类的子对象初始化

注:基类子对象的初始化是基类构造函数成员初始化列表的功能,而派生类不能完成这种功能。

 

15.  设置虚基类的目的是                       (   B )

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

 

16.  下列函数中,           不能重载(   

A) 成员函数      B) 非成员函数  C) 析构函数      D) 构造函数

注:重载函数:同名不同参(个数、类型、顺序)

 

17.  关于动态联编的下列描述中,           是错误的        (  D  

A) 动态联编是以虚函数为基础的    

B) 动态联编是在运行时确定所调用的函数代码的

C) 动态联编调用函数操作是指向对象的指针或对象引用      

D) 动态联编是在编译时确定操作函数的 

注:动态联编是在运行时确定操作函数的,主要体现在继承里指向基类对象的指针或者引用指向派生类对象。

 

18.  关于虚函数的描述中,           是正确的      (   

A) 虚函数是一个static类型的成员函数 B) 虚函数是一个非成员函数

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

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

 

19.  下列描述中,           是抽象类的特性   ( 

A) 可以说明虚函数        B) 可以进行构造函数重载  

C) 可以定义友元函数    D) 不能说明其对象

 

20.  在类定义的外部,可以被访问的成员有                   ( 

A) 所有类成员  B) private的类成员 

C) public的类成员   D) public或private的类成员

 

21.  关于this指针的说法错误的是              ( A 

A) this指针必须显示说明            B) 当创建一个对象后,this指针就指向该对象

C) 成员函数拥有this指针          D) 静态成员函数不拥有this指针

注:this指针是创建对象时,系统创建的一个特殊的指针,指向该对象,所以无须显示说明。(this指针是隶属于对象的,所以静态成员函数不拥有this指针,因为静态成员函数隶属于类)

 

22.  下面对构造函数的不正确描述是                        ( B 

A) 系统可以提供默认的构造函数     B) 构造函数可以有参数,所以可以有返回值

C) 构造函数可以重载           D) 构造函数可以设置默认参数

 

23.  对静态成员的不正确描述是( 

A) 静态成员不属于对象,是类的共享成员  

B) 静态数据成员要在类外定义和初始化

C) 静态成员函数拥有this指针  //参照21

D) 非静态成员函数也可以操作静态数据成员

 

24.  操作是专门针对有虚函数的继承结构的,将基类指针转换成想要的子类指针,做好操作的准备         (   

A) dynamic            B) static_cast     C) static D) dynamic_cast

 

25.  当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的                    (   

A) public成员    B) private成员   C) protected成员      D) 友元

 

26.  在创建派生类对象时,构造函数的执行顺序是     (   

A) 对象成员构造函数、基类构造函数、派生类本身的构造函数

B) 派生类本身的构造函数、基类构造函数、对象成员构造函数

C) 基类构造函数、派生类本身的构造函数、对象成员构造函数

D) 基类构造函数、对象成员构造函数、派生类本身的构造函数

注:先祖先,后客人,再自己;析构函数与此相反

 

27.  在C++中,要实现动态联编,必须使用             调用虚函数     (  D )

A) 类名       B) 派生类指针  C) 对象名   D) 基类指针

 

28.  假设A为抽象类,下列声明             是正确的       ( B )

A) A fun(int);             B) A *p;       C) int fun(A);             D) A Obj;

注:抽象类可以定义指针和引用

 

29.  关于类模板,描述错误的是           (   

A) 一个普通基类不能派生类模板     B)类模板从普通类派生,也可以从类模板派生

C) 根据建立对象时的实际数据类型,编译器把类模板实例化为模板类

D) 函数的类模板参数须通过构造函数实例化

注:普通类可以从类模板派生,但不能从普通类派生出类模板

 

30.  要求打开文件 d:\file.dat,可写入数据,正确的语句是        (   D  

A) ifstream infile(“d:\file.dat”, ios::in);

B) ifstream infile(“d:\\file.dat”, ios::in);

C) ofstream infile(“d:\file.dat”, ios::out);

D) fstream infile(“d:\\file.dat”, ios::in| ios::out);

注:打开文件写入数据可用“ios::out”,文件名书写时用到两个“\”,是因为转义字符“\\”代表一个“\

 

得分较高的同学有:常中平 窦江盼 贾雷 马秀月 王螺霞 相晓雷 (注:没有男生)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有