《面向对象程序设计》19秋期末考核-0001
一、单选题 (共 15 道试题,共 30 分)
1.在一个string类对象表示的字符串中查找子串,应该使用string类的()函数。
A.swap
B.insert
C.find
D.assign
2.关于下面程序段说法正确的是( ) class X { private: int n; public: X(X&); }; X::X(X&x) {n=x.n} X obj1,obj2(obj1);
A.语句obj2(obj1);的功能是用对象obj2初始化具有相同类类型的对象obj1
B.语句obj2(obj1);的功能是用对象obj1初始化具有相同类类型的对象obj2
C.X(X&x)函数中不能访问对象的私有成员
D.X(X&x)中的&符号可以删除
3.在下列关键字中,用以说明类中公有成员的是( )。
A.public
B.protected
C.private
D.friend
4.下面程序段中,说法正确的是( ) class location{ public : int GetX(); }; class rectangle:private location { public: int GetW(); };
A.类rectangle的私有派生类是location
B.类rectangle中的public成员在类 location中是私有的
C.类location中的public成员在类 rectangle中是不可访问的
D.viod f( ) { Rectangle r; int X=r .GetX( ); } 其中int X = r .GetX( );是非法语句
5.在C++标准模板库中,vector容器是一种( )。
A.标准类模板
B.标准类
C.标准对象
D.标准函数
6.在C++中,能被派生类继承的函数是( )。
A.析构函数
B.构造函数
C.拷贝构造函数
D.成员函数
7.不同的对象可以调用相同名称的函数,并可导致完全不同的行为的现象称为( )。
A.继承
B.抽象
C.封装
D.多态性
8.可以用p.a的形式访问派生类对象p的基类成员a其中a是( )。
A.私有继承的公有成员
B.公有继承的私有成员
C.公有继承的公有成员
D.公有继承的保护成员
9.缺省析构函数的函数体是( )。
A.随机产生的
B.空的
C.无法确定的
D.不存在
10.下列关于虚函数的说明中,正确的是()。
A.虚函数不得是静态成员函数
B.抽象类中的成员函数都是虚函数
C.只能通过指针或引用调用虚函数
D.从虚基类继承的函数都是虚函数
11.下列虚基类的声明中,正确的是()。
A.virtual class B:public A
B.class virtual B:public A
C.class B: virtual public A
D.class B: public A virtual
12.已知“int a=10;int &r=a; r=r+20;cout<<a;”,则输出为()。
A.不确定值
B.30
C.20
D.10
13.下列程序中说明的公有成员是( ) class Location { int X; public: void init(int initX,int initY); private: int Y; public: int GetX(); int GetY(); };
A.init(int initX,int initY)
B.X
C.GetX(),GetY()
D.B和C都是
14.派生类中的成员不能访问基类中的()。
A.私有成员
B.公有成员
C.保护成员
D.以上都可以
15.下列关于this指针的说法,错误的是()。
A.静态成员函数中可以通过this指针访问非静态成员
B.在成员函数中对非静态数据成员的访问是通过this指针完成的
C.this指针指向当前正在操作的对象
D.this指针只存在于非静态成员函数中
二、多选题 (共 10 道试题,共 20 分)
16.已知Derived是Base的公有派生类,且已定义两个对象Derived d;和Base b;,则下列语句中正确的是( )。
A.d=b;
B.b=d
C.Derived *d=&b;
D.Base &b=d;
17.下列说法正确的是( )。
A.定义内联函数需要在函数定义处加上inline关键字
B.定义内联函数需要在函数声明处加上inline关键字
C.内联函数是为了避免函数调用所引起的额外时间开销
D.内联函数中不能包括循环、switch等复杂结构控制语句
18.下列的模板说明的头中,错误的是( )。
A.template
B.template
C.template
D.template
19.下面描述中,错误的是( )。
A.在派生类中不可见的成员要变成可访问的,需要进行访问声明
B.在基类定义的public成员在保护继承的派生类中可见,也能在类外被访问
C.在基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被访问
D.在基类定义的public和protected成员在保护继承的派生类中可见
20.下列选项中,属于顺序容器的选项有( )。
A.vector
B.set
C.map
D.list
21.假设A为抽象类,下列语句( )是正确的。
A.int fun(A&);
B.A *p;
C.A fun(int);
D.A Obj;
22.下列说法正确的是( )。
A.高级语言编写的程序必须通过特定翻译程序翻译成机器语言后才能被计算机读懂
B.计算机所完成的每一个基本动作称为一条指令
C.汇编语言和C++语言都是高级程序设计语言
D.机器语言是计算机可以读懂的语言
23.下面关于自定义类的运算符重载的说法中,正确的是( )。
A.类友元形式重载的运算符,重载函数的参数个数与运算符的实际操作数个数相同
B.类友元形式重载的运算符,重载函数中的this指针指向第一个运算数
C.类友元形式重载的运算符,重载函数中可以直接访问类中的私有成员
D.所有运算符都可以以类友元形式进行重载
24.已知string s=”123456″, s1=”de”;,则下列选项中正确的语句包括( )。
A.s.insert(s.begin()+1,s1);
B.s.insert(s.begin()+1,’p’);
C.s.insert(s.begin()+1,”abc”);
D.s.insert(1,”abc”);
25.下面描述中,正确的是( )。
A.虚拟继承可以解决多重继承中的二义性问题
B.类层次中的类从虚基类中直接继承虚基类的成员
C.在有虚基类的类层次中,销毁派生类对象时析构函数的调用顺序与创建派生类对象时构造函数的调用顺序相反
D.在有虚基类的类层次中,创建派生类对象时,会先调用基类的构造函数再调用虚基类的构造函数
三、判断题 (共 10 道试题,共 20 分)
26.类A有如下成员函数: int A::fun(double x){return (int) x/2;} int A::fun(int x){return x*2;} 设a为类A的对象,在主函数中执行语句int s=a.fun(6)+a.fun(2.0)后的s值为13。
27.定义虚函数所用的关键字是virtual。
28.运算符重载的形式有两种:成员函数形式和友元形式。
29.面向对象的英文缩写是OOP。
30.使用打开文件函数open()之前,需要定义一个流类对象,使用open()函数来操作该对象。
31.类A有如下成员函数: int A::fun(double x){return (int) x/2;} int A::fun(int x){return x*2;} 设a为类A的对象,在主函数中执行语句int s=a.fun(6.0)+a.fun(2)后的s值为7。
32.在成员函数的函数类型前加上const关键字,则该成员函数就是常量成员函数。
33.设在程序中使用如下语句申请了一个对象数组:Point *ptr=new Point[2]; 当要释放ptr指向的动态数组对象时,所使用的语句是delete ptr。
34.在派生类构造函数的成员初始化列表中,可以包含基类构造函数的调用。
35.C语言中printf命令在c++中改用cin。
四、问答题 (共 3 道试题,共 30 分)
36.将下列程序填写完整。
{图}
{图}
37.写出下面程序的运行结果。
{图}
{图}
38.写出下面程序的运行结果。
{图}