西安交通大学《面向对象程序设计》期末考试必备题集
奥鹏期末考核
3054–西安交通大学《面向对象程序设计》奥鹏期末考试题库合集
单选题:
(1)用“”运算符从键盘输入多于一个数据时,各数据之间应使用( )符号作为分隔符。
A.空格或逗号
B.逗号或回车
C.逗号或分号
D.空格或回车
答案问询微信:424329
(2)假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数的类型为( )。
A.int
B.char
C.AA
D.AA*
答案问询微信:424329
(3)假定AB为一个类,则执行“AB*p=new AB(1,2);”语句时共调用该类构造函数的次数为( )。
A.0
B.1
C.2
D.3
答案问询微信:424329
(4)面向对象方法的多态性是指( )。
A.一个类可以派生出多个特殊类
B.一个对象在不同的运行环境中可以有不同的变体
C.针对一消息,不同的对象可以以适合自身的方式加以响应
D.一个对象可以是由多个其他对象组合而成的
答案问询微信:424329
(5)下述静态数据成员的特性中,()是错误的。
A.声明静态数据成员时前面要加修饰符static。
B.静态数据成员要在类体外进行初始化。
C.在程序中引用静态数据成员时,要在静态数据成员名前加类名和作用域运算符。
D.静态数据成员是一个类的个别对象所共享的。
答案问询微信:424329
(6)若一个类中含有纯虚函数,则该类称为( )。
A.基类
B.虚基类
C.抽象类
D.派生类
答案问询微信:424329
(7)C++对C语言作了很多改进,下列描述中( )使得C语言发生了质变,即从面向过程变成为面向对象。
A.增加了一些新的运算符
B.允许函数重载,并允许设置缺省值
C.规定函数说明必须用原型
D.引进了类和对象的概念
答案问询微信:424329
(8)以下关于函数模板的论述中,正确的是()。
A.一旦定义了函数模板,就不能再定义同名的重载函数
B.从同一个函数模板实例化后得到的多个模板函数属于函数重载;
C.函数模板中只有一种参数;
D.在定义函数模板时,template语句与函数模板定义语句之间可以有别的语句。
答案问询微信:424329
(9)C++语言建立类族是通过( )。
A.类的嵌套
B.类的继承
C.虚函数
D.抽象类
答案问询微信:424329
(10)假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为( )。
A.px(a)
B.px[a]
C.px-a
D.px.a
答案问询微信:424329
(11)关于this指针的说法正确的是( )
A.this指针必须显示说明
B.当创建一个对象后,this指针就指向该对象
C.成员函数拥有this指针
D.静态成员函数拥有this指针
答案问询微信:424329
(12)假设已经定义好了一个类student,现在要定义类derived,它是从student私有派生的,定义类derived的正确写法是( )。
A.“class derived::student prived {// …} ;”
B.“class derived:student public {// …} ;”
C.“class derived:private student{// …} ;”
D.“class derived::student public stuednt {// …} ;”
答案问询微信:424329
(13)下列语句中错误的是()。
A.“int *p=new int (10);”
B.“int *p=new int [10];”
C.“int *p=new int ;”
D.“int *p=new int (10)(0);”
答案问询微信:424329
(14)在( )情况下适宜采用inline定义内联函数。
A.函数体含有循环语句
B.函数体含有递归语句
C.函数代码少、频繁调用
D.函数代码多、不常调用
答案问询微信:424329
(15)假定CTest为一个类,并且有一无默认值的的有参构造函数和一无参构造函数,则执行“CTest objTest;”语句时将自动调用该类的( )。
A.有参构造函数
B.无参构造函数
C.复制构造函数
D.赋值构造函数
答案问询微信:424329
(16)函数没有返回值的时候,应该选择( )的函数类型。
A.void
B.int
C.不确定
D.float
答案问询微信:424329
(17)选出关于运算符重载的正确概念是( )
A.所有的运算符都可以被重载
B.C++中可以定义新的运算符
C.重载运算符不能改变原有运算符的参数个数、优先级及结合性
D.凡是能被成员函数重载的运算符也一定能被友元函数重载
答案问询微信:424329
(18)面向对象程序设计将数据与_____放在一起,作为一个相互依存、不可分割的整体来处理。
A.对数据的操作
B.信息
C.数据隐藏
D.数据抽象
答案问询微信:424329
(19)假定一个二维数组的定义语句为“ int a [3][4]={{3,4),{2,8,6));”,则元素a[1][2] 的值为( )。
A.2
B.4
C.6
D.8
答案问询微信:424329
(20)指针可以用来表示数组元素,下列表示中_____是错误的。已知:int a[3][7];
A.*(a+1)[5]
B.*(*a+3)
C.*(*(a+1))
D.*(&a[0][0]+2)
答案问询微信:424329
(21)关键字class和typename用于定义模板类型参数,其含义为( )。
A.任何用户定义的类类型
B.C++内部的类型
C.A与B
D.都不是
答案问询微信:424329
(22)在关键字private后面定义的成员为类的( )成员。
A.私有
B.公用
C.保护
D.任何
答案问询微信:424329
(23)类的析构函数的作用是( )。
A.一般成员函数
B.类的初始化
C.对象的初始化
D.对象释放后的操作
答案问询微信:424329
(24)下面关于析构函数特征的描述正确的是( )。
A.一个类中可以定义多个析构函数
B.析构函数名与类名相同
C.析构函数不能指定返回类型
D.析构函数可以有一个或多个参数
答案问询微信:424329
(25)关于动态联编的下列描述中,______是错误的。
A.动态联编是以虚函数为基础的;
B.动态联编是在运行时确定所调用的函数代码的;
C.用指针或引用所标识的对象来操作虚函数才能进行动态联偏;
D.动态联编是在编译时确定操作函数的;
答案问询微信:424329
(26)关于构造函数特点描述中,错误的是()。
A.定义构造函数必须指出类型
B.构造函数的名字与该类的类名相同
C.一个类中可以定义0个至多个构造函数
D.构造函数是一个成员函数
答案问询微信:424329
(27)假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为( )。
A.x.a
B.x.a()
C.x-a
D.x-a()
答案问询微信:424329
(28)下面关键字中( )是定义模板的关键字。
A.public
B.static
C.class
D.template
答案问询微信:424329
(29)使用如setfill()的操作符对数据进行格式输出时,应包含( )头文件。
A.iostream
B.fstream
C.iomanip
D.stdlib
答案问询微信:424329
(30)对于语句cinx;中各个组成部分,下列叙述中错误的是( )。
A.;的作用是语句的结束
B."cin"是一个输出流对象
C.""称作提取运算符
D."x"是一个变量
答案问询微信:424329
(31)类型修饰符unsigned修饰_____类型是错误的。
A.Char
B.int
C.long int
D.float
答案问询微信:424329
(32)如果表达式a+b中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。
A.a.operator+(b)
B.b.operator+(a)
C.operator+(a,b)
D.operator(a+b)
答案问询微信:424329
(33)编写C++程序一般需经过的几个步骤依次是()。
A.编译、编辑、连接、调试
B.编辑、编译、连接、调试
C.编译、调试、编辑、连接
D.编辑、调试、编辑、连接
答案问询微信:424329
(34)控制输出格式的控制符中,( )是设置输出宽度的。
A.ws
B.ends
C.setfill
D.setw
答案问询微信:424329
(35)下列函数中,( )是对文件进行读操作的。
A.read()
B.write()
C.tellg()
D.seekp()
答案问询微信:424329
(36)在类中声明转换函数时不能指定( )
A.参数
B.访问权限
C.操作
D.标识符
答案问询微信:424329
(37)关于构造函数,下列说法不正确的是( )。
A.构造函数名字和类名相同
B.构造函数在创建对象时自动执行
C.构造函数无任何函数返回类型
D.构造函数有且只有一个
答案问询微信:424329
(38)类的析构函数是一个对象被( )时自动调用的。
A.建立
B.撤消
C.赋值
D.引用
答案问询微信:424329
(39)用关键字( )标记的函数被称为虚函数。
A.virtual
B.private
C.public
D.protected
答案问询微信:424329
(40)设x和y均为bool量,则x&&y为真的条件是()。
A.它们均为真
B.其中一个为真
C.它们均为假
D.其中一个为假
答案问询微信:424329
(41)以下叙述中正确的是( )
A.使用#define可以为常量定义一个名字,该名字在程序中可以再赋另外的值
B.使用const定义的常量名有类型之分,其值在程序运行时是不可改变的
C.在程序中使用内置函数使程序的可读性变差
D.在定义函数时可以在形参表的任何位置给出缺省形参值
答案问询微信:424329
(42)下列对继承关系的描述中,正确的是______。
A.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的;
B.在公有继承中,基类中只有公有成员对派生类的对象是可见的;
C.在私有继承中,基类中只有公有成员对派生类是可见的;
D.在私有继承中,基类中的保护成员对派生类的对象是可见的;
答案问询微信:424329
(43)下列关于私有继承的说法中正确的是()。
A.基类成员对派生类新定义的成员函数是不可见的;
B.基类成员对派生类新定义的成员函数是可见的;
C.只有基类成员中的公有成员对派生类新定义的成员函数是可见的;
D.基类成员中的保护成员对派生类新定义的成员函数是可见的。
答案问询微信:424329
(44)在成员函数中进行双目运算符重载时,其参数表中应带有( )个参数。
A.0
B.1
C.2
D.3
答案问询微信:424329
(45)关于继承中出现的二义性的描述中,______是错误的。
A.一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性;
B.解决二义性的最常用的方法是对成员名的限定法;
C.在单继承情况下,派生类中对基类成员的访问也会出现二义性;
D.一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性;
答案问询微信:424329
(46)在 ()情况下适宜采用inline定义内置函数。
A.函数体含有循环语句
B.函数体含有递归语句
C.函数代码少、且频繁调用
D.函数代码多、不常调用
答案问询微信:424329
(47)下列函数中,()不能重载。
A.一般的成员函数
B.一般的非成员函数
C.析构函数
D.构造函数。
答案问询微信:424329
(48)下面有关重载函数的说法中正确的是( )。
A.重载函数必须具有不同的返回值类型
B.重载函数形参个数必须不同
C.重载函数必须有不同的形参列表
D.重载函数名可以不同
答案问询微信:424329
(49)对于类模板,其类型形参可以作为______。
A.成员函数的形参类型
B.成员函数的返回类型
C.数据成员的类型
D.其他三种均可
答案问询微信:424329
(50)关于C++中的继承机制,错误的说法是______。
A.虚拟继承限定基类只能通过一条路径派生出派生类;
B.解决多继承带来的二义性的方法之一是对成员名加以限定;
C.派生类的构造函数的成员初始化列表中,可包含基类中的子对象;
D.继承是一种组织类的基本手段。
答案问询微信:424329
(51)下列对派生类的描述中,______是错的。
A.一个派生类可以作为另一个派生类的基类;
B.派生类至少有一个基类;
C.派生类的成员除了它自己的成员外,还包含了它的基类的成员;
D.派生类中继承的基类成员的访问权限到派生类保持不变;
答案问询微信:424329
(52)下列程序段不会发生二义性的是_____。
A.int fun(double p){…;} float fun(float p){…;} int x; x=fun(0);
B.int fun(float p){…;}float fun(unsigned p){…;} int x; x=fun(0);
C.int fun(int i,int j=2){…;} float fun(int i){…;} coutfun(5);
D.int fun(int i=2,int j=2){…;} int fun(int *p){…;} coutfun(5);
答案问询微信:424329
(53)下列对继承关系的描述中,______是正确的。
A.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的;
B.在公有继承中,基类中只有公有成员对派生类的对象是可见的;
C.在私有继承中,基类中只有公有成员对派生类是可见的;
D.在私有继承中,基类中的保护成员对派生类的对象是可见的;
答案问询微信:424329
(54)类的析构函数是在( )调用的。
A.类创建时
B.创建对象时
C.对象生命期结束时
D.不自动调用
答案问询微信:424329
(55)虚函数的定义是在基类中进行的,定义时需要冠以关键字( )。
A.static
B.friend
C.virtual
D.public
答案问询微信:424329
(56)下列说法不正确的是()。
A.在类中,成员的默认访问特性是私有的。
B.类封装了数据和操作。
C.类实质上是一种数据类型。
D.在类的定义中,必须包含private、publi
E.protected三种存取方式对应得部分。
答案问询微信:424329
(57)C++源程序文件的缺省扩展名为( )。
A.cpp
B.exe
C.obj
D.lik
答案问询微信:424329
(58)在一个类的定义中,包含有( )成员的定义。
A.数据
B.函数
C.数据和函数
D.数据或函数
答案问询微信:424329
(59)假定一个类的构造函数为 “A(int aa, int bb) {a=aa; b=aa*bb;}”,则执行 “A x(4,5);”语句后,x.a和x.b的值分别为( )
A.4和5
B.5和4
C.4和20
D.20和5
答案问询微奥鹏期末考核信:424329
(60)C++编译系统确定调用是具体对象的过程称为关联。C++有( )关联。
A.1种
B.2种
C.3种
D.4种
答案问询微信:424329
(61)为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择( )。
A.内置函数
B.重载函数
C.递归函数
D.函数模板
答案问询微信:424329
(62)下面对友元的错误描述是()。
A.友元函数不可访问对象的private成员
B.一个类的成员函数可以是另一个类的友元
C.友元类和友元函数均用关键字friend声明
D.友元函数可以访问对象的protected成员
答案问询微信:424329
(63)下列对引用的陈述中错误的是()。
A.每一个引用都是其所引用对象的别名,因此必须初始化;
B.形式上针对引用的操作实际上作用于它所引用的对象;
C.一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行;
D.不需要单独为引用分配存储空间 。
答案问询微信:424329
(64)类的析构函数可以带有( )个参数。
A.0
B.1
C.2
D.任意
答案问询微信:424329
(65)已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给A1的m赋值为5,( )是正确的。
A.A1.p=5;
B.A1->p=5;
C.A1.*p=5;
D.*A1.p=5;
答案问询微信:424329
(66)下面是重载双目运算符+的普通函数原形,其中最符合+原来含义的是( )。
A.Valueoperator+(Value,Value);
B.Valueoperator+(Value,int);
C.Value&operator+(Value,Value*);
D.Value&operator+(Value&,Value&);
答案问询微信:424329
(67)下面是五条顺序出现的声明语句,非法的初始化语句是( )。
A.inti=–1;
B.constintic=i;
C.constint*pc=
D.int*constcpi=constint*constcpic=
答案问询微信:424329
(68)下面关于引用的说法错误的是( )。
A.引用是被引用对象的别名
B.对引用的修改就是对被引用对象的修改,反之亦然
C.引用不一定立即初始化
D.引用不能建立数组
答案问询微信:424329
(69)下列说法错误的是( )。
A.在类中,成员的默认访问特性是私有的;
B.类封装了数据和操作;
C.类实质上是一种数据类型;
D.在类的定义中,必须包含private、publi
E.protected三种存取方式对应得部分。
答案问询微信:424329
(70)下列函数中,( )不能重载。
A.一般的成员函数;
B.一般的非成员函数;
C.析构函数;
D.构造函数。
答案问询微信:424329
(71)下列关于运算符重载的描述中,( )是正确的。
A.运算符重载可以改变运算数的个数;
B.运算符重载可以改变优先级;
C.运算符重载可以改变结合性;
D.运算符重载不可以改变语法结构。
答案问询微信:424329
(72)下列关于虚基类的说法错误的是( )。
A.有引入虚基类的目的是解决二义性的问题;
B.因为虚基类可被多个派生类继承,因此可以有多个副本以适应不同的派生类;
C.若某个类被说明为虚基类,则被重复继承的该类成员在派生类对象中只有一个副本;
D.在派生类对象创建时,要保证虚基类的构造函数只被调用一次。
答案问询微信:424329
(73)下列关于类的访问控制机制说法错误的是( )。
A.静态数据成员通常都定义为公有类型。
B.一个对象的私有成员对于同类的另一个对象是可见的。
C.友元机制破坏了类的封装性。
D.基类的保护成员对派生类新定义的成员函数是可见的。
答案问询微信:424329
(74)下列对继承关系的描述中,正确的是( )。
A.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的;
B.在公有继承中,基类中只有公有成员对派生类的对象是可见的;
C.在私有继承中,基类中只有公有成员对派生类是可见的;
D.在私有继承中,基类中的保护成员对派生类的对象是可见的;
答案问询微信:424329
(75)下列程序段不会发生二义性的是( )。
A.intfun(doublep){…;}
B.intfun(floatp){…;}
floatfun(floatp){…;}floatfun(unsignedp){…;}
intx;intx;
x=fun(0);x=fun(0);
C.intfun(inti,intj=2){…;}
D.intfun(inti=2,intj=2){…;}
floatfun(inti){…;}intfun(int*p){…;}
cout<<fun(5);cout<<fun(5);
答案问询微信:424329
(76)若有如下函数模板定义,则正确使用该函数模板的语句是( )。
template
void add(type a, type b, type &c)
{ c=a+b?; }
A.floatx,y,z;add(x,y,z)?;
B.intx,y,z;add(x,y,&z)?;
C.floatx,y?;intz;add(x,y,z)?;
D.floatx,y?;intz;add(x,y,&z)?;
答案问询微信:424329
(77)基类A中有成员函数fn1()、fn2(),在派生类B中重载了成员函数fn1()(即重新定义了fn1()),但没有重载其成员函数fn2()。如果在派生类B中调用基类A的成员函数fn1()(不是B中重载的数fn1())和fn2(),则正确的方式是( )。
A.A::fn1()和fn2();
B.fn1()和A::fn2();
C.A::fn1()和A::fn2();
D.fn1()和fn2();
答案问询微信:424329
(78)关于以下程序段中语法错误的正确描述是( )。
#include
voidmain()
{
constchar*p1=”string1”;
char*constp2=”string”;
char*p3=”string3”;
p1[2]=’a’;//①
p2[2]=’b’;//②
p1=p3;//③
p2=p3;//④
}
A.①②③④均错误
B.①和④错误
C.②和③错误
D.③和④错误
答案问询微信:424329
(79)关于C++中的继承机制,错误的说法是( )。
A.虚拟继承限定基类只能通过一条路径派生出派生类;
B.解决多继承带来的二义性的方法之一是对成员名加以限定;
C.派生类的构造函数的成员初始化列表中,可包含基类中的子对象;
D.继承是一种组织类的基本手段。
答案问询微信:424329
(80)对于类模板,其类型形参可以作为( )。
A.成员函数的形参类型
B.成员函数的返回类型
C.数据成员的类型
D.其他三种均可
答案问询微信:424329
(81)带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( )。
A.与虚基类下面的派生类个数有关
B.多次
C.二次
D.一次
答案问询微信:424329
(82)不可以成为类的数据成员的是( )。
A.自身类的对象
B.另一个类的对象
C.自身类的指针或引用
D.其他基本数据类型
答案问询微信:424329
(83)下面是重载双目运算符+的普通函数原形,其中最符合+原来含义的是( )。
A.Value operator+(Value,Value);
B.Value operator+(Value,int);
C.Value &operator+(Value,Value*);
D.Value &operator+(Value&,Value&);
答案问询微信:424329
(84)若有如下函数模板定义,则正确使用该函数模板的语句是( )。
template
void 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,y,&z)?;
答案问询微信:424329
(85)对于如下类的定义,下面语句组中出现语法错误的是( )。
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.Xa1=Y(1,3);
C.Yb1(2,3);X&a3=b1;
D.Xa4(10);Yb2=a4;
答案问询微信:424329
多选题:
(1)下列关于构造函数描述正确的是
A.构造函数的名字必须与类名相同
B.构造函数可以有任意类型的参数,但不能具有返回类型
C.定义对象时,编译系统会自动地调用构造函数
D.构造函数用于为对象分配空间,进行初始化。
答案问询微信:424329
判断题:
(1)使用字符串流时必须打开文件。( )
答案问询微信:424329
(2)内置函数的定义必须出现在第一次调用内置函数之前。( )
答案问询微信:424329
(3)字符串"sdfgh"的长度是5。( )
答案问询微信:424329
(4)成员函数中调用的虚函数可能实现动态联编。( )
答案问询微信:424329
(5)抽象类中只能有一个纯虚函数。( )
答案问询微信:424329
(6)如果定义了一个类的对象数组,该数组有10个元素,则要调用10次构造函数来对每个元素初始化。( )。
答案问询微信:424329
(7)打开一个二进制文件时可以同时指定它既是输入文件又是输出文件。( )
答案问询微信:424329
(8)不能通过派生类对象引用从私有基类继承过来的任何成员。( )
答案问询微信:424329
(9)对于从基类继承的虚函数,派生类也可以不进行重定义。( )
答案问询微信:424329
(10)私有继承的派生类不能访问基类中的私有成员,但公用继承的派生类可以访问基类中的私有成员。( )
答案问询微信:424329
(11)程序运行过程出现异常是由于语法错误引起的。( )
答案问询微信:424329
(12)引用和指针都可作函数参数。( )
答案问询微信:424329
(13)Iostream是抽象基类ios的直接派生类.。()
答案问询微信:424329
(14)C++中设置虚基类的目的是实现运算时的多态性。()
答案问询微信:424329
(15)使用虚函数无法避免多重继承产生的二义性。( )
答案问询微信:424329
(16)析构函数必须指定返回类型以及函数参数。( )
答案问询微信:424329
(17)在用class定义一个类时,如果不加声明,数据成员和成员函数默认的访问权限是public。( )
答案问询微信:424329
(18)将运算符“+”函数重载为类的成员函数,交换律不适用。( )
答案问询微信:424329
(19)C++中的所有运算符都允许重载。( )
答案问询微信:424329
(20)构造函数可以重载。( )
答案问询微信:424329
(21)引用可以不初始化。( )
答案问询微信:424329
(22)不可以定义抽象类的对象。( )
答案问询微信:424329
(23)使用new运算符创建数组时,可以为该数组指定初始值( )。
答案问询微信:424329
(24)纯虚函数是在基类中说明的虚函数,它在该基类中必须定义具体的操作内容。( )
答案问询微信:424329
(25)在调用构造函数时不必给出实参的构造函数称为默认构造函数。一个类只能有一个默认构造函数。( )
答案问询微信:424329
(26)重载函数不能改变运算符运算对象的个数。( )
答案问询微信:424329
计算题:
(1)建立类box,box的构造函数被传递了三个double值,每一个double值表示盒子的一条边长。用box类计算立方体的体积,并存储在一个double变量中,在box类中包含一个成员函数vol(),用来显示每个box对象的体积。
答案问询微信:424329
(2)下列在内存中分配一个整型数组并将其初始化为零的语句,正确与否?int *myval=new int[40](O);
答案问询微信:424329
简答题:
(1)有哪几种派生方式?
答案问询微信:424329
(2)什么是面向对象程序设计?它与面向过程程序设计的主要区别是什么?
答案问询微信:424329