您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 面向对象C++选择题
1.若定义:stringstr;当语句cinstr;执行时,从键盘输入:MicrosoftVisualStudio6.0!所得的结果是str=()。A.MicrosoftVisualStudio6.0!B.MicrosoftC.MicrosoftVisualD.MicrosoftVisualStudio6.0答案:B解析:cin在接收字符串时,会将遇到的空格符、回车符、Tab符时,都判断为字符串结束。若要输入带空格的字符串,可使用getline()函数。2.使用地址作为实参传给形参,下列说法正确的是()A.实参是形参的备份B.实参与形参无联系C.形参是实参的备份D.实参与形参指向同一对象答案:D解析:地址作为实参,表示实参与形参指向同一个对象,所以选择D项。3.下列程序的输出结果是()#includeiostream.hvoidmain(){intn[][3]={10,20,30,40,50,60};int(*p)[3];p=n;coutp[0][0],*(p[0]+1),(*p)[2]endl;}A.10,30,50B.10,20,30C.20,40,60D.10,30,60答案:B解析:如果数组元素都是相同类型的指针,则称这个数组为指针数组。指针数组一般用于处理二维数组。声明的格式为:数据类型(*变量名)[元素个数]。p表示指向数组n的行指针。如果将指针的初始化(*p)[3]=b;地址的等价形式:p+ip[i]*(p+i)都表示b数组第i+1行的第1个元素的首地址。*(p+i)+jp[i]+j&p[i][j]都表示b数组第i+1行、第j+1列元素的地址。值的等价形式:*(*(p+i)+j)*(p[i]+j)p[i][j]都表示b数组第i+1、第j+1列元素的值。所以题目分别访问p[0][0],p[0][1],p[0][2]。4.在C++中,函数原型不能标识()A.函数的返回类型B.函数参数的个数C.函数参数类型D.函数的功能答案:D解析:函数的声明,说明函数的参数、返回类型以及函数名,函数体即实现部分决定功能。所以函数的原型不能决定函数的功能。5.下列有关重载函数的说法中正确的是()A.重载函数必须具有不同的返回值类型B.重载函数参数个数必须相同C.重载函数必须有不同的形参列表D.重载函数名可以不同答案:C解析:函数的重载必须函数名相同而形参类型或个数不同,与返回值无关。6.关于new运算符的下列描述中,错误的是()A.它可以用来动态创建对象和对象数组B.使用它创建的对象或对象数组可以使用运算符delete删除C.使用它创建对象时要调用构造函数D.使用它创建对象数组时必须指定对象的初始值答案:D解析:new创建的对象数组不能指定对象的初始值,只能调用无参的构造函数,选择D项。7.对于int*pa[5];的描述,正确的是()A.pa是一个指向数组的指针,所指向的数组是5个int型元素B.pa是一个指向某个数组中第5个元素的指针,该元素是int型变量C.pa[5]表示某个数组的第5个元素的值D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针答案:D解析:指针数组:数组元素都是相同类型的指针,相同类型的指针是说指针所指向的对象类型是相同的。例如,语句int*pa[5];定义了一个指针数组。在指针数组的定义中有两个运算符:*和[],运算符[]的优先级高于*,所以*pa[5]等价于*(pa[5]),pa[5]表示一个数组,而*表示后面的对象为指针变量,合在一起*pa[5]表示一个指针数组。该数组包含5个元素,每个元素都是指向int型的指针。所以选择D选项。8.解决定义二义性问题的方法有()A.只能使用作用域分辨运算符B.使用作用域分辨运算符或成员名限定C.使用作用域分辨运算符或虚基类D.使用成员名限定或赋值兼容规则答案:B解析:解决二义性问题主要要两种方法:(1)赋值兼容规则;(2)虚基类。9.重载函数在调用时选择的依据中,错误的是()A.参数个数B.参数类型C.函数名字D.函数类型答案:D解析:在C++中,判断调用哪一个函数,依据的是函数的名字,参数个数和类型;因而D不正确。重载函数不看函数的返回类型类和对象10.下面()项是对构造函数和析构函数的正确定义。A.voidX::X(),voidX::~X()B.X::X(参数),X::~X()C.X::X(参数),X::~X(参数)D.voidX::X(参数),voidX::~X(参数)答案:B解析:构造函数没有类型,可以带参数;析构函数没有类型,不带参数。11.关于this指针使用说法正确的是()A.保证每个对象拥有自己的数据成员,但共享处理这些数据的代码B.保证基类私有成员在子类中可以被访问。C.保证基类保护成员在子类中可以被访问。D.保证基类公有成员在子类中可以被访问。答案:A解析:this指针是隐藏的,可以使用该指针来访问调用对象中的数据。基类的成员在派生类中能否访问,与继承方式有关,与this没有关系。所以选择A项。12.一个函数功能不太复杂,但要求被频繁调用,则应把它定义为()A.内联函数B.重载函数C.递归函数D.嵌套函数答案:A解析:内联函数特征代码少,频繁调用,执行效率高。重载函数解决统一接口的问题;递归是子程序调用,程序调用要耗费很多空间和时间,循环/迭代都比递归有效率得多,递归只是从形式上,逻辑比较简洁。嵌套函数即反复调用,速度较慢。所以选择A项。13.适宜采用inline定义函数情况是()A.函数体含有循环语句B.函数体含有递归语句C.函数代码少、频繁调用D.函数代码多、不常调用答案:C解析:内联函数具有程序代码少、频繁调用和执行效率高的特征,所以选择C项。14.假定一个类的构造函数为A(intaa,intbb){a=aa--;b=a*bb;},则执行Ax(4,5);语句后,x.a和x.b的值分别为()A.3和15B.5和4C.4和20D.20和5答案:C解析:a=4,因为后减,b的值与a、bb相关,b=4*5=20,而与aa没有任何关系。15.下列不能作为类的成员的是()A.自身类对象的指针B.自身类对象C.自身类对象的引用D.另一个类的对象答案:B解析:类的定义,如果有自身类对象,使得循环定义,B项错误。在类中具有自身类的指针,可以实现链表的操作,当然也可以使用对象的引用。类中可以有另一个类的对象,即成员对象。所以选择B选项。16.下列关于静态数据成员的描述中正确的是()A.静态数据成员是类的所有对象所共有的B.静态数据成员要在构造函数内初始化C.类的每个对象有自己的静态数据成员D.静态数据成员不能通过类的对象调用答案:D解析:静态成员属于类的即所有对象所共享的,只能在外部进行初始化。使用时可以使用形式有两种,类名::静态成员或者对象.静态成员。所以选择D项。17.假定AB为一个类,则执行“ABa(2),b[3],*p[4];”语句时调用该类构造函数的次数为()A.3B.4C.5D.9答案:B解析:a(2)调用1次带参数的构造函数,b[3]调用3次无参数的构造函数,指针没有给它分配空间,没有调用构造函数。所以共调用构造函数的次数为4。18.下列语句中,将函数intsum(intx,inty)正确重载的是()。A.floatsum(intx,inty);B.intsum(inta,intb);C.floatsum(floatx,floaty);D.doublesum(inty,intx);答案:C解析:函数重载,要求名称相同参数不同,因此A、B、D的参数完全相同,无法重载,只有C的参数变为float型,可构成重载。19.类MyA的拷贝初始化构造函数是()A.MyA()B.MyA(MyA*)C.MyA(MyA&)D.MyA(MyA)答案:C解析:复制即拷贝构造函数使用对象的引用作形参,防止临时产生一个对象,A无参构造函数,B是指针作为形参,D项是对象,所以选择C项。20.实现两个相同类型数加法的函数模板的声明是()A.add(Tx,Ty)B.Tadd(x,y)C.Tadd(Tx,y)D.Tadd(Tx,Ty)答案:D解析:实现两个相同类型数加法结果应该和操作数具有相同类型。进行加法运算后结果也是和参数具有相同类型,需要返回值。A无返回值时要用void,B形参无类型,C形参y没有类型,所以选择D项。21.下面有关类说法不正确的是()A.一个类可以有多个构造函数B.一个类只有一个析构函数C.析构函数需要指定参数D.在一个类中可以声明具有类类型的数据成员答案:C解析:构造函数可以有参数、可以重载、因此可以有多个,A项正确。析构函数只有一个不能重载、不能继承,没有返回值,B项正确,C项错误。22.已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的。A.voidprint()const;B.constvoidprint();C.voidconstprint();D.voidprint(const);答案:A解析:常成员函数的定义方式是在函数名和括号之后加上const。23.已知f1和f2是同一类的两个成员函数,但f1不能直接调用f2,这说明()A.f1和f2都是静态函数B.f1不是静态函数,f2是静态函数C.f1是静态函数,f2不是静态函数D.f1和f2都不是静态函数答案:C解析:普通成员函数可以调用静态函数,相反静态函数不能调用普通成员函数,这与普通函数与常成员函数相同。因此选择C项。24.在C++语言中,数据封装要解决的问题是()A.数据的规范化B.便于数据转换C.避免数据丢失D.防止不同模块之间数据的非法访问答案:D解析:封装是指把对象属性和操作结合在一起,构成独立的单元,它的内部信息对外界是隐蔽的,不允许外界直接存取对象的属性,只能通过有限的接口与对象发生联系。类是数据封装的工具,对象是封装的实现。类的访问控制机制体现在类的成员中可以有公有成员、私有成员和保护成员。对于外界而言,只需要知道对象所表现的外部行为,而不必了解内部实现细节。封装体现了面向对象方法的“信息隐蔽和局部化原则”。运算符重载25.如果表达式++a中的“++”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为()A.a.operator++(1)B.operator++(a)C.operator++(a,1)D.a.operator++()答案:D解析:运算符的重载,前缀先让变量变化。调用++a,等价为a.operator++(),注意无参的形式。后缀的话a++,等价于a.operator(0),带形参,形参名可省。26.若已有定义的Complex类,对其进行运算符重载,使其能够实现和double类型相加。则下列哪个说法是正确的()A.实现double+complex运算只能使用类的友元函数或普通函数进行重载B.实现double+complex运算只能使用类成员函数进行重载C.实现complex+double运算只能使用类的友元函数或普通函数进行重载D.实现complex+double运算只能使用类成员函数进行重载答案:A解析:若使用类内部函数重载双目运算符,则第一个参数必须是类对象本身,所以B不正确,使用友元函数或普通重载双目运算符,则两个参数不受限制。因而C、D不正确(两种方式都可以)27.若要重载流插入运算符来输出Complex类,下列哪个说法是错误的()。A.可以使用友元函数进行重载B.可以使用普通函数进行重载C.可以使用内部函数进行重载D.函数的返回值是ostream类型答案:C解析:重载运算符,需要两个参数,第一个为ostream类型,不是Complex类对象,不能使用内部函数若需要访问私有成员,则需要定义为友元函数,否则可以定义为普通函数。继承与派生28.下面描述中,表达错误的是()A.公用继承时基类中的public成员在派生类中仍是public的B.公用继承时基类中的private成员在派生类中仍是private的//不可访问的C.公用继承时基类中的p
本文标题:面向对象C++选择题
链接地址:https://www.777doc.com/doc-2034278 .html