面向对象程序设计习题.doc

上传人:peixunshi0 文档编号:140820 上传时间:2025-07-11 格式:DOC 页数:28 大小:85.51KB
下载 相关 举报
面向对象程序设计习题.doc_第1页
第1页 / 共28页
面向对象程序设计习题.doc_第2页
第2页 / 共28页
面向对象程序设计习题.doc_第3页
第3页 / 共28页
面向对象程序设计习题.doc_第4页
第4页 / 共28页
面向对象程序设计习题.doc_第5页
第5页 / 共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、下列关于私有继承的说

18、法中正确的是( )。 A、基类成员对派生类新定义的成员函数是不可见的;B、基类成员对派生类新定义的成员函数是可见的;C、只有基类成员中的公有成员对派生类新定义的成员函数是可见的;D、基类成员中的保护成员对派生类新定义的成员函数是可见的。47、下列程序段不会发生二义性的是( )。 A、int fun(double p).; 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

19、 i=2,int j=2).;float fun(int i).; int fun(int *p).;coutfun(5); couta D、x.a62、假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为()。A、x.a B、x.a() C、x-a D、x-a()63、假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为( )。A、px(a) B、pxa C、px-a D、px.a64、假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为

20、该类的一个对象,则访问x对象中数据成员a的格式为( )。 A、x.a B、x.a() C、x-GetValue() D、x.GetValue()65、若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( )放在函数原型或函数头的前面。 A、in B、inline C、inLine D、InLiner66、类的析构函数是一个对象被( )时自动调用的。 A、建立 B、撤消 C、赋值 D、引用67、能够释放对象所占资源的是( )。 A、析构函数 B、数据成员 C、构造函数 D、静态成员函数68、类的析构函数的作用是( ).。 A、一般成员函数 B、类的初始化 C、对象的初始化 D、对象释放

21、后的操作 69、对于一个类的析构函数,其函数名与类名( )。 A、完全相同 B、完全不同C、只相差一个字符 D、无关系70、一个类的析构函数通常被定义为该类的( )成员。 A、私有 B、保护 C、公用 D、友元71、定义析构函数时,应该注意( )。 A、其名与类名完全相同 B、返回类型是void类型 C、无形参,也不可重载 D、函数体中必须有delete语句77、类的析构函数可以带有( )个参数。 A、0 B、1 C、2 D、任意73、类的析构函数是在( )调用的。A、类创建时 B、创建对象时 C、对象生命期结束时 D、不自动调用74、当一个类对象离开它的作用域时,系统自动调用该类的( )。A

22、无参构造函数 B、带参构造函数 C、拷贝构造函数 D、析构函数75、假定一个类对象数组为An,当离开它定义的作用域时,系统自动调用该类析构函数的次数为( )。 A、0 B、1 C、n D、n-176、假定AB为一个类,则执行 “AB a10;”语句时调用该类无参构造函数的次数为( )。 A、0 B、1 C、9 D、1077、假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数的类型为( )。 A、int B、char C、AA D、AA*78、假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数为( )。 A、abc B、*this C、this D、

23、this&79、假定AB为一个类,则执行 “AB *px=new ABn;”语句时将( )。A、动态分配一个数组 B、动态分配一个对象C、静态分配一个数组 D、静态分配一个对象80、设px是指向一个类对象的指针变量,则执行 “delete px;”语句时,将自动调用该类的( ) A、无参构造函数 B、带参构造函数 C、析构函数 D、复制构造函数81、虚函数的定义是在基类中进行的,定义时需要冠以关键字( )。A、static B、friend C、virtual D、public82、C+编译系统确定调用是具体对象的过程称为关联。C+有( )关联。A、1种 B、2种 C、3种 D、4种83、调用

24、一个成员函数时,使用动态关联的情况是( )。A、通过对象调用一虚函数 B、通过指针或引用调用一虚函数C、通过对象调用一静态函数 D、通过指针或引用调用一静态函数84、C+类体系中,不能被派生继承的有( )。A、转换函数 B、构造函数 C、虚函数 D、静态成员函数85、C+语言建立类族是通过( )。A、类的嵌套 B、类的继承 C、虚函数 D、抽象类86、在下面的4个关键字中,( )是用来说明虚函数的。A、virtual B、public C、protected D、private87、实现运行时的多态性要使用( )。A、重载函数 B、析构函数 C、构造函数 D、虚函数88、关于纯虚函数,下列说法

25、不正确的是( )。 A、纯虚函数是在声明虚函数时被初始化为0的函数 B、纯虚函数没有函数体 C、纯虚函数可以被调用 D、如果在一个类中声明了纯虚函数,该虚函数中在派生类中仍有可能为虚函数89、如果一个类至少有一个纯虚函数,那么该类称为( ).。 A、抽象类 B、虚基类 C、派生类 D、以上都不对 90、C+的输入输出不包括( )。 A、标准的输入输出 B、文件的输入输出C、字符串输入输出 D、显示屏和打印机的输入输出91、下面的类中,( )不是由抽象基类ios直接派生出来的。 A、istream B、ostream C、iostream D、fstreambase92、在C+中,抽象基类ios

26、直接派生出( )。 A、istrean, ostream, ifstream,ofstreamB、istrean, ostream, istrstream,ostrstreamC、istrean, ostream, iostreamD、istrean, ostream, fstreambase,strstreambase93、cin是某个类的标准对象,该类是( )。A、ostream B、istream C、stdout D、stdin94、cout是某个类的标准对象,该类是( )。A、ostream B、istream C、stdout D、stdin95、对于一个类的析构函数,其函数名与类

27、名( )。 A、完全相同 B、完全不同 C、只相差一个字符 D、无关系96、类的构造函数是在定义该类的一个( )时被自动调用执行的。 A、成员函数 B、数据成员 C、对象 D、友元函数97、类的析构函数是一个对象被( )时自动调用的。 A、建立 B、撤消 C、赋值 D、引用98、一个类的构造函数通常被定义为该类的( )成员。 A、公用 B、保护 C、私有 D、友元99、一个类的析构函数通常被定义为该类的( )成员。 A、私有 B、保护 C、公用 D、友元100、假定AB为一个类,则执行 “AB x;”语句时将自动调用该类的( )。 A、带参构造函数 B、无参构造函数 C、拷贝构造函数 D、赋值

28、重载函数101、C+语言是从早期的C语言逐步发展演变而来的,与C语言相比,它在求解问题方法上进行的最大改进是( )。A、面向过程 B、面向对象 C、安全性 D、复用性102、C+源程序文件的缺省扩展名为( )。A、cpp B、exe C、obj D、lik103、由C+源程序文件编译而成的目标文件的缺省扩展名为( )。A、cpp B、exe C、obj D、lik104、由C+目标文件连接而成的可执行文件的缺省扩展名为( )。A、cpp B、exe C、obj D、lik105、编写C+程序一般需经过的几个步骤依次是( )。A、编译、编辑、连接、调试 B、编辑、编译、连接、调试C、编译、调试、

29、编辑、连接 D、编辑、调试、编辑、连接106、C+对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是( )。A、增加了一些新的运算符 B、允许函数重载,并允许设置缺省参数C、规定函数说明符必须用原型 D、引进了类和对象的概念107、面向对象软件开发中使用的OOA表示( )。A、面向对象分析 B、面向对象设计 C、面向对象语言 D、面向对象方法108、面向对象软件开发中使用的OOD表示( )。A、面向对象分析 B、面向对象设计 C、面向对象语言 D、面向对象方法109、关于面向对象系统分析,下列说法中不正确的是( )。A、术语“面向对象分析”可以用缩写OOA表示B、面向对象分析阶段对问

30、题域的描述比设计阶段更详细C、面向对象分析包括问题域分析和应用分析两个步骤D、面向对象分析需要识别对象的内部和外部特征110、下列关于成员函数特征的描述中,( )是错误的。A、成员函数一定是内置函数 B、成员函数可以重载 C、成员函数可以设置参数的默认值 D、成员函数可以是静态的111、关于构造函数,下列说法不正确的是( )。A、构造函数名字和类名相同B、构造函数在创建对象时自动执行C、构造函数无任何函数返回类型D、构造函数有且只有一个112、类的构造函数是在定义该类的一个( )时被自动调用执行的。A、成员函数 B、数据成员 C、对象 D、友元函数 113、一个类的构造函数通常被定义为该类的(

31、 )成员。A、公用 B、保护 C、私有 D、友元114、关于构造函数特点描述中,错误的是( )。A、定义构造函数必须指出类型B、构造函数的名字与该类的类名相同C、一个类中可以定义0个至多个构造函数D、构造函数是一个成员函数115、对于一个类的构造函数,其函数名与类名( )。A、完全相同 B、基本相同 C、不相同 D、无关系116、关于运算符重载,下列说法正确的是( )。A、重载时,运算符的优先级可以改变。B、重载时,运算符的结合性可以改变。C、重载时,运算符的功能可以改变。D、重载时,运算符的操作数个数可以改变。117、下列关于运算符重载的描述中,错误的是( )。A、运算符重载不可以改变操作数

32、的个数B、运算符重载不可以改变运算符的功能C、运算符重载不可以改变结合方向D、运算符重载不可以改变运算优先级118、关于运算符重载,下列说法正确的是( )。A、所有运算符都可以重载 B、通过重载,可以使运算符应用于自定义的数据类型 C、通过重载,可以创建原来没有的运算符号 D、通过重载,可以改变运算符的优先级119、在一个类中可以对一个运算符进行( )重载。 A、1种 B、2种以下 C、3种以上 D、多种120、不能参与重载的运算符是( )。A、类 B、函数 C、函数模板 D、运算符121、继承机制的作用是( )。A、信息隐藏 B、数据封装 C、定义新类 D、数据抽象122、C+的继承性允许派

33、生类继承基类的( )。 A、部分特性,并允许增加新的特性或重定义基类的特性 B、部分特性,但不允许增加新的特性或重定义基类的特性 C、所有特性,并允许增加新的特性或重定义基类的特性 D、所有特性,但不允许增加新的特性或重定义基类的特性123、下列对派生类的描述中,( )是错误的。A、一个派生类可以作为另一个类的基类B、派生类至少有一个基类C、派生类的成员除了它自己的成员外,还包含它的基类的成员 D、派生类中继承的基类成员的访问权限到派生类中保持不变124、派生类的对象对其基类中( )可直接访问。A、公有继承的公有成员 B、公有继承的私有成员C、公有继承的保护成员 D、私有继承的公有成员125、

34、基类和派生类可以分别称为( )。A、“大类”和“小类” B、“父类”和“子类”C、“小类”和“大类” D、“子类”和“父类”126、面向对象方法的多态性是指( )。A、一个类可以派生出多个特殊类B、一个对象在不同的运行环境中可以有不同的变体C、针对一消息,不同的对象可以以适合自身的方式加以响应D、一个对象可以是由多个其他对象组合而成的127、从系统实现的角度看,多态性分为静态多态性和动态多态性。以下说法错误的是( )。 A、静态多态性是编译时的多态性B、函数重载实现的多态性是静态多态性C、通过虚函数实现的多态性是静态多态性D、动态多态性是运行时的多态性128、关于消息,下列说法中不正确的是( )。A、发送消息的对象请求服务,接受消息的对象提供服务B、消息的发送者必须了解消息的接收者如何响应消息C、在C+中,消息的发送具体体现为对接收消息的对象的某个函数的调用D、每个对象只能接收某些特定格式的消息129、编译时的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > C/C++资料

宁ICP备18001539号-1