面向对象程序设计习题.doc
《面向对象程序设计习题.doc》由会员分享,可在线阅读,更多相关《面向对象程序设计习题.doc(28页珍藏版)》请在三一文库上搜索。
1、面向对象程序设计习题一、单项选择题1、下面关于引用的说法错误的是( )。A、引用是被引用对象的别名B、对引用的修改就是对被引用对象的修改,反之亦然C、引用不一定立即初始化D、引用不能建立数组2、用new运算符创建一个含有10个元素的一维整型数组的正确语句是( )。 A、int p = new int(10); B、int p = new int10; C、int *p = new int 10; D、int *p = new int(10);3、下面是五条顺序出现的声明语句,非法的初始化语句是( )。 A、int i = 1; B、const int ic=i; C、const int *pc
2、ic; D、int *const cpi=⁣ E、const int *const cpic= ⁣4、下列说法不正确的是( )。 A、在类中,成员的默认访问特性是私有的。B、类封装了数据和操作。C、类实质上是一种数据类型。D、在类的定义中,必须包含private、public、protected三种存取方式对应得部分。5、下列说法不正确的是( )。A、在类中不能对所定义的数据成员进行初始化。B、类的公有成员函数是类与外界的接口。C、同一个类的两个对象占用相同的内存空间 。 D、类实现数据隐藏。6、下列程序段不会发生二义性的是( )。 A、int fun(double p).;
3、B、int fun(float p).;float fun(float p).; float fun(unsigned p).;int x; int x;x=fun(0); x=fun(0); C、int fun(int i,int j=2).; D、int fun(int i=2,int j=2).;float fun(int i).; int fun(int *p).;coutfun(5); coutfun(5); 7、关于以下程序段中语法错误的正确描述是( )。#includevoid main() const char* p1= ”string1”; char* const p2= ”
4、string”; char* p3= ”string3”; p12= a; / p22= b; / p1=p3; / p2=p3; /A、均错误 B、和错误C、和错误 D、和错误8、由C+目标文件连接而成的可执行文件的缺省扩展名为( )。A、cpp B、exe C、obj D、lik9、下述静态数据成员的特性中,( )是错误的。A、声明静态数据成员时前面要加修饰符static。B、静态数据成员要在类体外进行初始化。C、在程序中引用静态数据成员时,要在静态数据成员名前加和作用域运算符。D、静态数据成员是本类中个别对象所共享的。 10、在下列的各类函数中,( )不是类的成员函数。A、构造函数B、析
5、构函数 C、友元函数D、拷贝构造函数11、友元的作用之一是( )。A、提高程序的运行效率。 B、加强类的封装性。C、实现数据的隐蔽性。 D、增加成员函数的种类。12、关于静态成员,正确的说法是( )。A、静态成员函数可以直接访问该类中的非静态成员B、非静态成员函数不能直接访问该类中的静态成员C、静态数据成员同其它数据成员一样通过构造函数进行初始化D、静态成员在任何对象创建之前就已经创建13、下面对友元的错误描述是( )。 A、友元函数不可访问对象的private成员B、一个类的成员函数可以是另一个类的友元C、友元类和友元函数均用关键字friend声明D、友元函数可以访问对象的protected
6、成员14、关于C+中的继承机制,错误的说法是( )。A、虚拟继承限定基类只能通过一条路径派生出派生类;B、解决多继承带来的二义性的方法之一是对成员名加以限定; C、派生类的构造函数的成员初始化列表中,可包含基类中的子对象; D、继承是一种组织类的基本手段。15、下列对派生类的描述中,( )是错的。A、一个派生类可以作为另一个派生类的基类;B、派生类至少有一个基类;C、派生类的成员除了它自己的成员外,还包含了它的基类的成员;D、派生类中继承的基类成员的访问权限到派生类保持不变;16、派生类的构造函数的成员初始化列表中,不能包含( )。A、基类的构造函数;B、派生类中子对象的初始化;C、基类的子对
7、象初始化;D、派生类中一般数据成员的初始化;17、下列对继承关系的描述中,( )是正确的。A、在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的;B、在公有继承中,基类中只有公有成员对派生类的对象是可见的;C、在私有继承中,基类中只有公有成员对派生类是可见的;D、在私有继承中,基类中的保护成员对派生类的对象是可见的;18、关于继承中出现的二义性的描述中,( )是错误的。A、一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性;B、解决二义性的最常用的方法是对成员名的限定法;C、在单继承情况下,派生类中对基类成员的访问也会出现二义性;D、一个派生类是从两个基
8、类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性;19、设置虚基类的目的是( )。A、简化程序;B、消除二义性;C、提高运行效率;D、减少目标代码;20、带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( )。A、与虚基类下面的派生类个数有关; B、多次;C、二次; D、一次;21、在创建派生类对象时,构造函数的执行顺序是( )。A、对象成员构造函数、基类构造函数、派生类本身的构造函数;B、派生类本身的构造函数、基类构造函数、对象成员构造函数;C、基类构造函数、派生类本身的构造函数、对象成员构造函数;D
9、基类构造函数、对象成员构造函数、派生类本身的构造函数。22、对于如下类的定义,下面语句组中出现语法错误的是( )。class X int a;public: X(int x=0) a=x;class Y:class X int b;public: Y(int x=0,int y=0):X(x) b=x;A、X *pa=new Y(1,2);B、X a1=Y(1,3);C、Y b1(2,3);X &a3=b1;D、X a4(10);Y b2=a4;23、下面是重载双目运算符+的普通函数原形,其中最符合+原来含义的是( )。 A、Value operator+(Value, Value); B、
10、Value operator+(Value,int); C、Value &operator+(Value, Value*); D、Value &operator+(Value&, Value&);24、下列关于运算符重载的描述中,( )是正确的。A、运算符重载可以改变运算数的个数;B、运算符重载可以改变优先级;C、运算符重载可以改变结合性;D、运算符重载不可以改变语法结构。25、下列函数中,( )不能重载。A、一般的成员函数;B、一般的非成员函数;C、析构函数;D、构造函数。26、关于运行时多态的下列描述中,( )是错误的。A、运行时多态是以虚函数为基础的;B、运行时多态是在运行时确定所调用的
11、函数代码的;C、用基类指针或引用所标识的派生类对象来操作虚函数才能实现运行时多态;D、运行时多态是在编译时确定操作函数的。27、关于基类和派生类的关系,( )是错误的。A、派生类对象属于基类;B、可以用派生类指针指向派生类对象;C、可以将基类对象赋值给派生类对象;D、派生类对象指针可转换为基类指针。28、基类A中有成员函数fn1()、fn2(),在派生类B中重载了成员函数fn1()(即重新定义了fn1()),但没有重载其成员函数fn2()。如果在派生类B中调用基类A的成员函数fn1()(不是B中重载的数fn1())和fn2(),则正确的方式是( )。A、A:fn1() 和fn2();B、fn1
12、) 和A:fn2();C、A:fn1() 和A:fn2();D、fn1() 和fn2();29、下面对模板的声明,正确的是( )。 A、template B、template C、template D、template30、若有如下函数模板定义,则正确使用该函数模板的语句是( )。templatevoid add(type a, type b, type &c) c=a+b; A、float x,y,z; add(x,y,z); B、int x,y,z; add(x,y,&z); C、float x,y; int z; add(x,y,z);D、float x,y; int z; add(x
13、y,&z);31、类模板的作用是可以将其实例化后得到一个具体的( )。 A、类 B、对象 C、模板类 D、模板函数32、以下关于函数模板的论述中,正确的是( )。 A、一旦定义了函数模板,就不能再定义同名的重载函数; B、从同一个函数模板实例化后得到的多个模板函数属于函数重载; C、函数模板中只有一种参数; D、在定义函数模板时,template语句与函数模板定义语句之间可以有别的语句。33、对于类模板,其类型形参可以作为( )。 A、成员函数的形参类型 B、成员函数的返回类型 C、数据成员的类型 D、以上三种均可34、已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给A
14、1的m赋值为5,( )是正确的。A、A1.p = 5; B、A1-p = 5; C、A1.*p = 5; D、*A1.p = 5;35、一个类的构造函数为 “B(int ax, int bx): a(ax), b(bx) ”,执行 “B x(1,2),y(3,4);x=y;”语句序列后x.a的值为( )。 A、1 B、2 C、3 D、436、下列关于类的访问控制机制说法错误的是( )。 A、静态数据成员通常都定义为公有类型。B、一个对象的私有成员对于同类的另一个对象是可见的。C、友元机制破坏了类的封装性。D、基类的保护成员对派生类新定义的成员函数是可见的。37、下面是四条顺序出现的声明语句,非
15、法的初始化语句是( )。A、int i = 1; B、const int ic=i; C、const int *pc=⁣ D、int *const cpi=⁣38、下述静态数据成员的特性中,( )是错误的。A、声明静态数据成员时前面要加修饰符static。B、静态数据成员要在类体外进行初始化。C、在程序中引用静态数据成员时,要在静态数据成员名前加和作用域运算符。D、静态数据成员是一个类的个别对象所共享的。 39、若有语句 int *p = new int5; int * pi; 则以下语句中,执行时会造成delete p 语句的执行出错的是( )。A、(*p)+; B、p+; C、
16、pi = p; D、pi=p+3;40、对于下面的两条语句,正确的描述是( )。 MyObject a(2), b(a), c; c = b = a;A、拷贝构造函数执行了1次; B、赋值运算符重载函数执行了3次; C、拷贝构造函数函数执行了3次; D、赋值运算符重载函数执行了1次;41、下列不是C+基本数据类型的是( )。A、intB、stringC、charD、void42、不可以成为类的数据成员的是( )。A、自身类的对象B、另一个类的对象C、自身类的指针或引用D、其他基本数据类型43、下列对继承关系的描述中,正确的是( )。A、在公有继承中,基类中的公有成员和私有成员在派生类中都是可见
17、的;B、在公有继承中,基类中只有公有成员对派生类的对象是可见的;C、在私有继承中,基类中只有公有成员对派生类是可见的;D、在私有继承中,基类中的保护成员对派生类的对象是可见的;44、下列说法错误的是( )。 A、在类中,成员的默认访问特性是私有的;B、类封装了数据和操作;C、类实质上是一种数据类型;D、在类的定义中,必须包含private、public、protected三种存取方式对应得部分。45、下列说法错误的是( )。A、在类中不能对所定义的数据成员进行初始化;B、类的公有成员函数是类与外界的接口;C、同一个类的两个对象占用相同的内存空间; D、类实现数据隐藏。46、下列关于私有继承的说
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 习题
