还剩3页未读,继续阅读
文本内容:
C++程序设计模拟试卷
五一、单项选择题本大题共20小题,每小题1分,共20分在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内错选、多选或未选均无分
1.静态成员函数没有
4.返回值
8.this指针C.指针参数D.返回类型答案B解析静态成员函数是普通的函数前加入static,它具有函数的所有的特征返回类型、形参,所以使用静态成员函数,指针可以作为形参,也具有返回值静态成员是类具有的属性,不是对象的特征,而this表示的是隐藏的对象的指针,因此静态成员函数没有this指针o静态成员函数当在类外定义时,要注意不能使用static关键字作为前缀由于静态成员函数在类中只有一个拷贝副本,因此它访问对象的成员时要受到一些限制静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员;若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,再通过对象来访问
2.在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是A.友元函数B.虚函数C.构造函数D.析构函数答案C解析定义构造函数作用就是初始化对象,而析构函数释放对象空间虚函数用于完成多态性,友元增加访问方便性
3.所有在函数中定义的变量,都是A.全局变量B.局部变量C.静态变量寄存器变量答案B解析变量存储类可分为两类全局变量和局部变量1全局变量在函数外部定义的变量称为全局变量,其作用域为从定义变量的位置开始到源程序结束全局变量增加了函数之间数据联系的渠道,全局变量作用域内的函数,均可使用、修改该全局变量的值,但是使用全局变量降低了程序的可理解性,软件工程学提倡尽量避免使用全局量o2局部变量在函数内部定义的变量称为局部变量,其作用域为从定义变量的位置开始到函数结束局部变量包含自动变量auto静态变量static以及函数参数auto变量意味着变量的存储空间的分配与释放是自动进行的说明符auto可以省略函数中的局部变量存放在栈空间在函数开始运行时,局部变量被分配内存单元,函数结束时,局部变量释放内存单元因此,任两个函数中的局部变量可以同名,因其占有不同的内存单元而不影响使用这有利于实现软件开发的模块化static变量是定义在函数体内的变量,存放在静态存储区,不用栈空间存储,其值并不随存储空间的释放而消失
4.假定AB为一个类,则执行“AB a2,b
[3],*p
[4]语句时调用该类构造函数的次数为月・3B.4C.5D.9答案B解析•a2调用1次带参数的构造函数,b
[3]调用3次无参数的构造函数,指针没有给它分配空间,没有调用构造函数所以共调用构造函数的次数为
45.如果表达式++a中的“++”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为A•a.operator++1B.operator++aC.operator++a,1D,a.operator++答案D解析运算符的重载,前缀先让变量变化调用++a,等价为a.operator++,注意无参的形式后缀的话a++,等价于a.operator0,带形参,形参名可省
6.已知fl和f2是同一类的两个成员函数,但fl不能直接调用f2,这说明A.fl和f2都是静态函数B.fl不是静态函数,f2是静态函数C.fl是静态函数,f2不是静态函数D.fl和f2都不是静态函数答案C解析普通成员函数可以调用静态函数,相反静态函数不能调用普通成员函数,这与普通函数与常成员函数相同因此选择C项
7.一个函数功能不太复杂,但要求被频繁调用,则应把它定义为
4.内联函数B.重载函数C.递归函数D.嵌套函数答案A解析内联函数特征代码少,频繁调用,执行效率高重载函数解决统一接口的问题;递归是子程序调用,程序调用要耗费很多空间和时间,循环/迭代都比递归有效率得多,递归只是从形式上,逻辑比较简洁嵌套函数即反复调用,速度较慢所以选择A项
8.解决定义二义性问题的方法有人只能使用作用域分辨运算符及使用作用域分辨运算符或成员名限定C.使用作用域分辨运算符或虚基类,使用成员名限定或赋值兼容规则答案B解析解决二义性问题主要要两种方法1赋值兼容规则;2虚基类
9.在main函数中可以用p.a的形式访问派生类对象p的基类成员a,其中a是私有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.公有继承的公有成员答案D解析公有成员可以在类外访问,保护类型成员可以在派生类中访问,但不能在类外访问,在main函数中访问,说明a是公有成员只有公有继承时a才能是公有的,所以D项正确
10.在C++中不返回任何类型的函数应该说明为A.intB・char C.void D.double答案C解析无形参或无返回值都可以用void来声明,int chardouble分别是整型、字符型和实型
11.若Sample类中的一个成员函数说明如下void setSample a,则Sample a的含义是A.指向类Sample的名为a的指针B.a是类Sample的对象引用,用来作函数Set的形参C.将a的地址赋给变量SetD.变量Sample与a按位与的结果作为函数Set的参数答案B解析成员函数使用对象的引用作为形参该函数的功能是将已知对象的所有数据成员的值拷贝给相应对象的所有数据成员,不会建立临时对象,这里是对象的引用所以选择B
12.要实现动态联编必须A.通过成员名限定来调用虚函数B.通过对象名来调用虚函数C.通过派生类对象来调用虚函数D.通过对象指针或引用来调用虚函数答案D解析通过基类指针或基类引用来调用虚函数实现动态多态性,静态多态性通过重载来实现的所以选择D项
13.在派生类中定义虚函数时,可以与基类中相应的虚函数不同的是
4.参数类型B.参数个数C.函数名称D.函数体答案D解析虚函数在基类和派生类,具有相同的返回类型、形参类型和形参个数,而函数体可以根据不同的派生类或基类实现不同的操作,即不同函数体
14.实现两个相同类型数加法的函数模板的声明是A.addT x,T yB.T addx,yC.T addT x,yD.T addT x,T y答案D解析实现两个相同类型数加法结果应该和操作数具有相同类型进行加法运算后结果也是和参数具有相同类型,需要返回值A无返回值时要用void,B形参无类型,C形参y没有类型,所以选择D项
15.下列不是描述类的成员函数的是A.构造函数瓦析构函数C.友元函数D.拷贝构造函数答案C解析友元函数虽然不是成员函数但是可以访问类所有成员构造函数、析构函数和拷贝构造函数复制构造函数都是类的特殊函数用于对象的创建和撤销,所以选择c项
16.继承机制的作用是A.信息隐藏B.数据封装C.定义新类.数据抽象答案C解析面向对象设计中的类的特点抽象、封装、继承和多态等,继承用于对类的扩展,所以选择C项
17.已知p是一个指向类A数据成员m的指针,A1是类A的一个对象如果要给m赋值为5,正确的是A.Al.p=5;B.Al-p=5;C.Al.*p=5;D.*A
1.p=5;答案C解析A中p是指针即地址,错误;B选项中Al不是指针不能使用指向运算符-,错误;“*”比”级别要高,所以D选项*Al.p=5相当于*Al.p=5;错误另外涉及到指向成员函数时注意以下几点指向成员函数的指针必须于其赋值的函数类型匹配的三个方面1参数类型和个数;2返回类型;3它所属的类类型成员函数指针的声明指向short型的Screen类的成员的指针定义如下short Screen::*ps Screen;ps_Screcn可以用_height的地址初始化如下short Screen::*ps_Screen=Screen::_height;类成员的指针必须总是通过特定的对象或指向改类型的对象的指针来访问是通过使用两个指向成员操作符的指针针对类对象和引用的以及针对指向类对象的指针的-*
18.如果采用动态多态性,要调用虚函数的是A.基类对象指针B.对象名C.基类对象D.派生类名答案A而析基类指针或者基类的引用调用虚函数都会产生动态多态性
19.若有以下定义,则说法错误的是int a=100,*p=a;
4.声明变量P,其中*表示P是一个指针变量B.变量p经初始化,获得变量a的地址C.变量p只可以指向一个整型变量D.变量p的值为100答案I》析指针变量如同其他变量一样,在使用之前必须先声明声明指针变量的格式为类型名*变量名;其中,〈类型名〉是指针变量所指向对象的类型,它可以是C++语言预定义的类型,也可以是用户自定义类型〈变量名〉是用户自定义的标识符符号*表示〈变量〉是指针变量而不是普通变量o*表示指针,P是变量,p指向一个整型的变量,值为a的地址值,*p=100o
20.C++语言建立类族是通过A.类的嵌套B.类的继承C.虚函数,抽象类答案B解析类族即同一个类派生出来的类,各个类是兄弟或父子关系
二、填空题本大题共20小题,每小题1分,共20分请在每小题的空格中填上正确答案错填、不填均无分
1.假设int a=l,b=2;则表达式++a/b*b—的值为—答案2[解析]前缀++或一一表示先使变量值变化,再使用,这和后缀恰恰相反但是编译cout«++a/b*b—时,先++a/b值为1,后l*b—,先取b=2,结果为2,再让b=l
2.复制构造函数使用—作为形式参数答案对象的引用[解析]复制构造函数使用对象的引用来初始化一个新对象,避免临时产生对象3,通过C++语言中的—机制,可以从现存类中构建其子类答案继承[解析•]继承概念,从现有的类生成新类,原有的类称为父类或基类,新类又称子类或派生类或衍生类,它是对基类的扩充
4.静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是—o答案友元函数[解析]友元函数不是类成员,但可以访问类成员类的封装性保证了数据的安全,但引入友元,虽然访问类是方便了,但确实破坏类访问的安全性
5.在下面的类定义中,私有成员有class Location{int X,Y;protected:int zeroX,zerxY;int SetZerointzeroX,intzeroY;private:int length,height;public:void initint initX,int initY;int GetX;int GetY;};答案X,Y,length,height6,在C++程序设计中,建立继承关系倒挂的树应使用—继承答案单[解析]一个基类可以派生多个子类,一个子类可以再派生出多个子类,这样就形成了一个倒立的树
7.C++支持的两种多态性分别是—多态性和运行多态性答案静态或编译[解析]多态性包括静态编译时的和动态运行时的动态性
8.C++中语句const char*const p=hello;所定义的指针p和它所指的内容都不能被答案修改[解析]使用const修改的内容不能修改,这里同时修饰地址和值,表示地址和值都不变
9.在C++中,定义虚函数的关键字是—o答案virtual[解析]在普通函数前面用virtual修饰的函数,就称为虚函数
10.采用私有派生方式,基类的public成员在私有派生类中是—成员答案私有
11.对赋值运算符进行重载时,应声明为—函数答案类成员[解析]运质符重载的方法有友元或者成员函数两种途径,但是赋值运算符只能使用成员函数的方法来实现
12.在C++中有两种参数传递方式即值传递和—传递答案引用[解析]函数参数传递有传值和传引用两种
13.预处理命令以—符号开头答案operator[解析]文件包含、预处理和编译都是以#开头
14.在构造函数和析构函数中调用虚函数时采用—o答案静态联编[解析]在析构或构造函数调用虚函数发生静态多态性
15.C++是通过引用运算符—来定义一个引用的答案[解析]引用是C不具有使用方法,它表示变量的别名,在函数中使用很频繁,因为调用形式同传值调用,但修改形参实参也会相应改变的特征
16.如果要把类B的成员函数void fun说明为类A的友元函数,则应在类A中加入语句答案friendvoid B::fun;[解析]声明成员函数作为另外一个类的友元函数时,使用类作用域运算符
17.如果要把PI声明为值为
3.14159类型为双精度实数的符号常量,该声明语句是答案const doublePI案.14159;或者const doublePI=
3.14159;[解析]使用const声明符号常量,常量和常量值可以用括号也可以赋值号
18.在C++四个流对象中,—用于标准屏幕输出答案cout[解析]cin^cout cerr和clog中cin用于输入,cout用于输出,cerr^clog错误处理
19.执行下列代码int a=32;double c=32;cout.setfios::hex;cout«,zhex:a=z/a«,z,c=,c«endl;cout.unsetfios::hex;程序的输出结果为答案hex:a=20,c=32[解析]用十六进制只能输出整型数据,而不能将其它类型数据转换成十六进制的数据输出所以double类型不变仍然是32double类型
20.已知有20个元素int类型向量VL若用VI初始化为V2向量,语句是—答案ector intV2VI;[解析]采用向量初始化另一个向量的形式vector typenamel name;
三、改错题本大题共5小题,每小题4分,共20分
1.iiinclude iostream.hclass A{private:int x;public:Aint i{x=i;}A{x=0;}friend int minA,A;};intminAa,A b{return a.xb.xa.x:b.x;void main{A a3,b5;couta.mina,bendl;答案cout«a.min a,b endl;友元函数不是类成员,所以对象a不能使用a.min a,b这种方法o min就是一个普通的友元函数[修改]coutmin a,b endl;
2.Sinclude iostream.hclass shape{public:virtual int area{return0;};class rectangle:public shape{public:inta,b;void setLengthint x,int y{a=x;b=y;}int area{return a*b;};void main{rectangle r;r.setLength3,5;shape sl,*s2=r;cout r.area endl;s2=sl;cout s
2.area endl;}答案shape si,*s2=r;指针使用错误s是指针使用它指向对象的成员有两种方法,有下面两行可知,使用的是引用[修改]改为shape s=r;
3.下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见ttinclude iostream.htemplate classTclass A{private:Tx,y,s;public:AT a,T b{x=a,y=b;s=x+y;}void show{coutz,x+y=,,sendl;。
个人认证
优秀文档
获得点赞 0