2023.6.12C++期末选择题

1、关于函数的调用下面不正确的是(  ).

A:由于程序总是从主函数开始,所以函数的调用总是在主函数和其他函数之间进行

B:函数的调用可以在任意函数之间进行,只要有需要

C:一个函数可以自己调用自己

D:函数返回时可以不带返回值,这时函数在定义时其返回值的类型用void表示

答案:A

2、下列描述正确的是(  ).

A:C++中,有字符串常量也有字符串变量.

B:C++中,字符串的处理只能用string类提供的字符串处理方法.

C:C++中,字符串的结束标识为'\n'.      '\0'

D:C++中,处理字符串既可以用字符数组也可以用string类提供的处理方法.

答案:D

3、由类中创建的对象称为(    ).

A:属性

B:类的实例

C:基类

D:派生类

答案:B

4、关于this指针正确的叙述是______.

A:非静态函数成员将this指针作为函数的隐含参数.

B:this指针为只读指针.

C:return  *this返回的是调用该函数的对象.

D:其余选项都正确.

答案:D

5、关于 C++与 C 语言关系的描述中,( )是错误的。

A.C 语言是 C++语言的一个子集

B.C 语言与 C++语言是兼容的

C.C++语言对 C 语言进行了一些改进

D.C++语言和 C 语言都是面向对象的

答案:D

6、关于 C++与 C 语言关系的描述中,( )是错误的。

A.C 语言是 C++语言的一个子集

B.C 语言与 C++语言是兼容的

C.C++语言对 C 语言进行了一些改进

D.C++语言和 C 语言都是面向对象的

答案:D

7、设有程序段

int m=20; while (m=0) m=m++;

则下面描述中正确的是( )。

A.while 循环执行 10 次

B.循环是无限循环

C.循环体语句一次也不执行

D.循环体语句执行一次

答案:C

8、设有程序段

int m=20; while (m=1) m=m++;

则下面描述中正确的是( )。

A.while 循环执行 10 次

B.循环是无限循环

C.循环体语句一次也不执行

D.循环体语句执行一次

答案:B

9、当调用函数时,实参是一个数组名,则向函数传送的是( )。

A.数组的长度

B.数组的首地址

C.数组每一个元素的地址

D.数组每个元素中的值

答案:B

10、有如下函数调用语句:
func(rec1, rec2+rec3, (rec4, rec5));
则该函数调用语句中,含有的实参个数是( )。

A.3

B.4

C.5

D.有语法错

答案:A

11、若已定义: int a[9], *p=a;并在以后的语句中未改变 p 的值,不能表示 a[1] 地址的
表达式是( )。

A.p+1

B.a+1

C.a++

D.++p

答案:C

12、在基类型相同的两个指针变量之间,不能进行的运算是( )。

A.<      //判断指针g高低

B.=      //赋值

C.+

D.–   //取两指针之间相隔的同类型元素个数

答案:C

13、在( )情况下适宜采用inline定义内联函数。

A.函数体含有循环语句

B.函数体含有递归语句

C.函数代码少、频繁调用

D.函数代码多、不常调用

答案:C

14、设void f1(int * m,long & n);int a;long b;则以下调用合法的是()。

A.f1(a,b);

B.f1(&a,b);

C.f1(a,&b);

D.f1(&a,&b);

答案:B

15、C++对C语言作了很多改进,下列描述中()使得C语言发生了质变,从面向过程变成了面向对象。

A.增加了一些新的运算符;

B.允许函数重载,并允许设置缺省参数;

C.规定函数说明必须用原型;

D.引进了类和对象的概念;

答案:D

16、下列函数中,( )不能重载。

A.成员函数

B.非成员函数

C.析构函数

D.构造函数

答案:C

17、下列运算符中,( )运算符不能重载  // . (成员访问运算符)      * (成员指针访问运算符)   

A.&&                                             :: (域运算符)   ? : (条件运算符)    sizeof  (长度运算符)

B.[ ]

C.::

D.<<

答案:C

18、关于动态绑定的下列描述中,( )是错误的。

A.动态绑定是以虚函数为基础的

B.动态绑定在运行时确定所调用的函数代码

C.动态绑定调用函数操作是通过指向对象的指针或对象引用来实现的

D.动态绑定是在编译时确定操作函数的

答案:D

19、关于虚函数的描述中,( )是正确的。

A.虚函数是一个static 类型的成员函数

B.虚函数是一个非成员函数

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

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

答案:C

20、关于纯虚函数和抽象类的描述中,( )是错误的。

A.纯虚函数是一种特殊的虚函数,它没有具体的实现

B.抽象类是指具有纯虚函数的类

C.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类

D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出

答案:C

21、下列描述中,( )是抽象类的特性。

A.可以说明虚函数

B.可以进行构造函数重载

C.可以定义友元函数

D.不能定义该类对象    //但是可定义指针

答案:D

22、cout 是由I/O 流库预定义的( )。

A.类

B.对象

C.包含文件

D.常量

答案:B

23、有关类和对象的说法下列不正确的有( )。

A.对象是类的一个实例

B.任何一个对象只能属于一个具体的类

C.一个类只能有一个对象

D.类与对象和关系与数据类型和变量的关系相似

答案:C

24、在下面类声明中,关于生成对象不正确的是( )。

class point
{ public:
int x;
int y;
point(int a,int b) {x=a;y=b;}
};

A.point p(10,2);

B.point *p=new point(1,2);      //很重要 在纯虚基类中的应用很多

C.point *p=new point[2];

D.point *p[2]={new point(1,2), new point(3,4)};

答案:C

25、命名空间应用于:

A.在类外定义类的成员函数

B.避免各个不同函数、变量等的名称冲突

C.提高代码的执行速度

D.以上答案都正确

答案:B 

26、所有类都应该有:

A.构造函数

B.析构函数

C.构造函数和析构函数

D.以上答案都不对

答案:C

27、析构函数可以返回:

A.指向某个类的指针

B.某个类的对象

C.状态信息表明对象是否被正确地析构

D.不可返回任何值

答案:D

28、对于类之间的友元关系:

A.如果类A是类B的友元,则B的成员函数可以访问A的私有成员       //反了

B.如果类A是类B的友元,则B也是A的友元。                //单向友元

C.如果类A是类B的友元,并且类B是类C的友元,则类A也是类C的友元。   //无继承

D.以上答案都不对。 

答案:D                         

28、友元的作用是

A.提高程序的运用效率

B.加强类的封装性                   //破坏了封装性和隐藏性

C.实现数据的隐藏性

D.增加成员函数的种类

答案:A

29、在C++语言中设置虚基类的目的是( ) 。

A.简化程序代码

B.提高程序的运行效率

C.解决多继承造成的二义性问题

D.缩短程序的目标代码

答案:C

30、假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为()

A.x.a

B.x.a()

C.x->a()

D.(*x).a()

答案:B

31、静态成员函数没有:

A.返回值

B.this指针

C.指针参数

D.返回类型

答案:B

32、下面对静态数据成员的描述中,正确的是

A.静态数据成员是类的所有对象共享的数据

B.类的每个对象都有自己的静态数据成员

C.类的不同对象有不同的静态数据成员

D.静态数据成员不能通过类的对象调用,只能通过“类名::标识符”调用

答案:A

33、下面对静态数据成员的描述中,正确的是?               在类外初始化  如 int student::a=0;
A、静态数据成员可以在类体内进行初始化
B、静态数据成员不可以被类的对象调用
C、静态数据成员不受private控制符的作用
D、静态数据成员可以直接用类名调用

答案: D

34、继承机制的作用是

A.信息隐藏

B.数据封装

C.定义新类

D.数据抽象

答案:C

35、在公有继承的情况下,允许派生类直接访问的基类成员包括______。

 A.公有成员 

B.公有成员和保护成员

C.公有成员、保护成员和私有成员

 D.保护成员

答案:B

36、下列关于派生类构造函数和析构函数的说法中,错误的是

A.派生类的构造函数会隐含调用基类的构造函数

B.如果基类声明了带有形参表的构造函数,则派生类就应当声明构造函数    //不理解但是硬记

C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数

D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数

答案:D

37、建立派生类对象时, 3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数),这3种构造函数的调用顺序为

A.abc

B.acb

C.cab

D.cba

答案:A

38、下列关于继承的描述中,错误的是( )。

A.析构函数不能被继承            //易忘

B.派生类是基类的组合

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

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

答案:D

39、

下面关于继承和派生的构造函数和析构函数的程序,输出结果是

#include
using namespace std;
class AA {
public:
    AA() { cout << "A"; }
    ~AA() { cout << "a"; }
};
class BB: public AA {
    AA aa;
public:
    BB() { cout << "B"; }
    ~BB() { cout << "b"; }
};
int main() {
    BB bb;
    return 0;
}

A.AABaab

B.AABbaa

C.BAAaab

D.BAAbaa

答案:B

40、如有函数定义:void func(int x = 0, int y = 0){ …. },则下列函数调用中会出现问题的是____。

A.func(1,2, 3);

B.func(1,2);

C.func(1);

D.func();

答案:A

41、以下有关函数的叙述中正确的是( )。

A.函数必须返回一个值

B.函数体中必须有return语句

C.两个同名函数,参数表相同而返回值不同不算重载

D.函数执行中形参的改变会改变实参

答案:C

42、以下说法中正确的是

A.一个类一定会有无参构造函数

B.构造函数的返回值类型是void

C.一个类只能定义一个析构函数,但可以定义多个构造函数

D.一个类只能定义一个构造函数,但可以定义多个析构函数

答案:C

43、设有如下代码段:

class A {
public:
    void func1() {
        cout << "A1" << endl;
    }
    virtual void func2() {
        cout << "A2" << endl;
    }
};
class B : public A {
public:
    void func1() {
        cout << "B1" << endl;
    }
    void func2() {
        cout << "B2" << endl;
    }
};

int main() {
    A *a = new B;
    a->func1();
    a->func2();
}

则输出结果为:

A.A1 A2

B.A1 B2

C.B1 A2

D.B1 B2

答案:D

44、下面程序的运行结果为

#include
class A
{
  int num;
public:
  A(int i){num=i;}
  A(A &a){num=a.num++;}
  void print(){cout<

A.11

B.12

C.21

D.22

答案:C

45、假设MyClass是一个类,则该类的拷贝初始化构造函数的声明语句为( )

A.MyClass&(MyClass x);

B.MyClass(MyClass x);

C.MyClass(MyClass &x);

D.MyClass(MyClass *x)

答案:C

46、为类提供对外接口的是( )

A.公有成员函数

B.私有成员函数

C.保护成员函数

D.友元函数

答案:A

47、下列哪一种情况下,类的复制构造函数不会被调用

A.用类的一个对象赋值给另一个对象时

B.当用类的一个对象去初始化该类的另一个对象时

C.如果函数的形参是类的对象,调动函数时,进行形参和实参结合时

D.如果函数的返回值是类的对象,函数执行完成返回调用者时

答案:A

48、已知int i, a; 执行语句i=(a=2*3,a*5),a+6;后,变量i的值是( )。

A.6               //问的是i的值不是表达式

B.12

C.30

D.36

答案:C

49、有如下的字符串数组定义语句,

char str1[ ]={'p','r','o','g','r','a','m'};

char str2[ ]={'p','r','o','g','r','a','m','\0'};

char str3[ ]="program";

则下列说法正确的是(  ).

A) str1中的数据可以作为一个整体(字符串)参加运算.

B) str2和str3中的数据只能作为一个整体(字符串)参加运算.

C) str2和str3中的数据既可以元素为单位参加运算,也可以作为

   一个整体(字符串)为单位参加运算.

D) str1、str2和str3中的数据既可以元素为单位参加运算,也可以

   作为一个整体(字符串)为单位参加运算.

答案:C

50、

 

你可能感兴趣的:(c++,开发语言)