




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
26. 虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数。而非函数不支持多态调用。有如下程序:#includeusing namespace std;class Basepublic: virtual void f()coutf0+; void g() coutg0+;class Derived:public Basepublic: void f()cout f+; void g()coutf(); p-g(); return 0;运行时输出的结果是_。A、f+g+B、f0+g+C、f+g0+D、f0+g0+本题考查的是多态与虚拟函数。 Derived:f()在基类中被定义为虚拟函数,故在执行p-f()时,将根据该指针所指对象的实际类型调用成员函数,而p是指向一个Derived类型的指针,故在调用p-f()时,将调用Derived:f(),输出f+,对于p-g(),由于g()没有被定义成虚拟函数,将直接依据指针类型调用该成员函数,p是一个Base类的指针,故将调用Base:g(),从而输出g0+,故本题输出为f+g0+。故本题答案为C。14. 若有如下类定义:class B void fun1()protected: double var 1;public: void fun2();class D: public Bprotected: void fun3() ;已知obj是类D的对象,下列语句中不违反类成员访问控制权限的是_。A、obj.fun1();B、obj.var1;C、obj.fun2();D、obj.fun3()本题考查的是类成员的访问控制。类中提供了3中访问控制权限:公有(public)、私有(private)和保护(protected)。 B类中成员定义访问权限为:fun1()为私有,var1为保护,fun2为公共类D公共继承B类结构,继承结构不改变成员权限。因为对象外部调用成员,只能访问(公共)Public权限成员,仅fun2()为Public权限。故本题答案为C。15. 已知一程序运行后执行的第一个输出操作是coutsetw(10)setfill(*)1234; 则此操作的输出结果是_。A、1234B、*1234C、*1234D、1234*setw(10)表示要输出10个宽度。 setfill(*)表示没有达到宽度要求的用*替换。 1234表示操作的数据,因此前应该有6个*。 故本题答案为B。16. 有如下程序:#include using namespace std;class MyClasspublic: MyClass() +count; MyClass() -count; static int getCount() return count;private: static int count;int MyClass:count=0;int main() MyClass obj; coutobj.getCount(); MyClass *ptr=new MyClass; coutMyClass:getCount(); delete ptr; coutMyClass:getCount(); return 0;程序的运行结果是_。A、121 B、232 C、221 D、122本题考查的是类的构造函数。 int MyClass:count=0;的意思是初始化静态变量count=0; MyClass obj;是指创建类MyClass对象obj,这时会执行类MyClass的构造方法MyClass() +count;,得到count=1,coutobj.getCount();输出1。 MyClass *ptr=new MyClass;创建类MyClass指针对象*ptr,这时会执行类MyClass的构造方法MyClass()+count;得到count=2,coutMyClass:getCount();输出2。 delete ptr;删除指针对象,这时会调用析构方法MyClass()-count;,得到count=1,coutMyClass:getCount();输出1。故本题答案为A。27. 有如下程序:#include using namespace std;class MyClasspublic: MyClass(int x):val(x) void Print() const coutconst:val=valt; void print() coutval=valt;private: int val;int main() const MyClass obj1(10); MyClass obj2(20); obj1.Print(); obj2.Print(); return 0;程序的输出结果是_。A、val=10 const:val=20B、const:val=10 const:val=20C、const:val=10 val=20D、val=10 val=20本题考查的是构造函数调用顺序。 const MyClass obj1(10);首先定义了MyClass的const对象obj1,并初始构造函数参数为x=10。构造函数通过:val(x)将x的值给val。 MyClass obj2(20);定义MyClass的对象obj2,并初始构造函数参数为x=20。构造函数通过:val(x)将x的值给val。 obj1.Print();调用Obj1对象中的Print()函数,输出obj1对象成员变量val的当前值,即输出const:val=10。 obj2.Print();调用Obj2对象中的Print()函数,输出obj2对象成员变量val的当前值,即输出const:val=20。故本题答案为B。27. 有如下程序:#include using namespace std;class MyClasspublic: MyClass(int x):val(x) void Print() const coutconst:val=valt; void print() coutval=valt;private: int val;int main() const MyClass obj1(10); MyClass obj2(20); obj1.Print(); obj2.Print(); return 0;程序的输出结果是_。A、val=10 const:val=20B、const:val=10 const:val=20C、const:val=10 val=20D、val=10 val=20本题考查的是构造函数调用顺序。 const MyClass obj1(10);首先定义了MyClass的const对象obj1,并初始构造函数参数为x=10。构造函数通过:val(x)将x的值给val。 MyClass obj2(20);定义MyClass的对象obj2,并初始构造函数参数为x=20。构造函数通过:val(x)将x的值给val。 obj1.Print();调用Obj1对象中的Print()函数,输出obj1对象成员变量val的当前值,即输出const:val=10。 obj2.Print();调用Obj2对象中的Print()函数,输出obj2对象成员变量val的当前值,即输出const:val=20。故本题答案为B。30. 有如下头文件:int f1();static int f2();class MApublic: int f3(); static int f4();在所描述的函数中,具有隐含的this指针的是_。A、f1B、f2C、f3D、f4本题考查的是this指针。 this指针式一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确地表示出了成员函数当前操作的数据所属的对象。当对一个对象调用成员函数时,编译程序先将对象的地址赋值给this指针,然后调用成员函数,每次成员函数存取数据成员时,则隐含使用this指针。 this指针是指向对象本身的指针,它只存在于类的非静态成员中。f1,f2不是成员函数,不存在隐含指针;f4为静态成员函数,也不含有this指针;含有this指针的函数在调用时按thiscall调用约定调用。 故本题答案为C。12. 有如下程序:#includeusing namespace std;class Base int x;public: Base(int n=0):x(n)coutn; int getX()return x;class Derived:public Base int y;public: Derived(int m,int n):y(m),Base(n)coutm; Derived(int m):y(m)coutm;int main() Derived d1(3),d2(5,7);return 0;运行时的输出结果是_。A、375B、357C、0375D、035712. 本题考查的是派生的构造函数和基类的构造函数的调用顺序。建立派生类对象时,构造函数的执行顺序如下:(1)执行基类的构造函数。(2)执行成员对象的构造函数。(3)执行派生类的构造函数。如果一个基类同时声明了缺省构造函数和带有参数的构造函数,那么在派生类构造函数的声明中,既可以给出基类名和相应的参数,也可以完全不给出基类名,系统会自动的调用相应的构造函数。派生类Derived由基类Base公有派生而来。在派生类构造函数声明时系统会自动调用基类的缺省构造函数。调用Derived d1(3)后,执行派生类Derived的构造函数的Derived(int m),系统会自动调用基类的带有默认值的构造函数Base(int n=0),输出0;再执行派生类的构造函数Derived(int m),输出字母3。调用Derived d2(5,7)后,执行派生类Derived的构造函数的Derived(int m,int n),系统会自动调用基类的构造函数Base(int n=0),输出7;再执行派生类的构造函数Derived(int m,int n),输出5。故本题答案为C。19. 有如下类声明:class Baseprotected: int amount;public: Base(int n=0):amount(n) int getAmount()constreturn amount;class Derived:public Baseprotected: int value;public: Derived(int m,int n):value(m),Base(n) int getData()constreturn value+amount;已知x是一个Derived对象,则下列表达式中正确的是_。A、x.value+x.getAmount()B、x.getData()-x.getAmount()C、x.getData()-x.amountD、x.value+x.amount19. 本题考查的是派生类的继承。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员。保护成员同时具有公有成员和私有成员的特征,派生类对基类的保护成员的访问与对公有成员的访问相同,而派生类的实例对保护成员的访问与对私有成员的访问相同。本题中派生类Derived公有继承基类Base,基类中的保护成员amount在派生类中仍然是保护成员,而派生类的实例x不可以直接访问保护成员,因此选项C和D错误。value也为派生类Derived的保护成员,x不可以直接访问,因此选项A和D错误。故本题答案为B。20. 有如下程序:#includeusing namespace std;class GApublic: virtual int f()return 1;class GB:public GApublic: virtual int f()return 2;void show(GA g)coutg.f();void display(GA &g)coutg.f();int main() GA a;show(a);display(a); GB b;show(b);display(b);return 0;运行时的输出结果是_。A、1111B、1211C、1112D、121220. 本题考查的是子类型。公有继承时,派生类的对象可以作为基类的对象处理,派生类是基类的子类型。子类型关系使得在需要基类对象的任何地方都可以用公有派生类的对象来替代,从而可以使用相同的函数统一处理基类对象和公有派生类对象(形参为基类对象时,实参可以是派生类对象),但是派生类对象作为基类的对象时用时,只能使用从基类继承的成员。本题中派生类GB是从基类GA公有继承的,因此GB是基类GA的子类型。 main()函数中定义了一个基类对象a和一个派生类对象b,当用基类对象a做为形参调用函数void show(GA g)和void display(GA &g)时,函数show(a)和display(a)调用的是基类中的虚函数virtual int f(),因此都输出1;派生类对象b做为形参调用函数void show(GA g)时,是将派生类对象作为基类的对象,因此只能使用从基类继承的成员,函数void show(b)实际调用的是基类中的虚函数virtual int f(),因此都输出1;派生类对象b做为形参调用函数void display(GA &g) 时,g是引用类型,因而对引用变量g的任何实际的操作实际上就是对派生类对象b的操作,所以函数display(b)调用的是派生类b的虚函数virtual int f(),因此都输出2。故本题答案为C。23. 下列语句分别是不同程序中的第一个输入输出语句。若去掉其中的left,输出效果将发生变化的是_。A、coutleftsetfill(*)357;B、coutleftsetw(5)357;C、coutleftsetw(5)ABCDE;D、coutleftABCDE;23. 本题考查的是C+流。 Left:输出数据在指定宽度内左对齐。 setw(int n):设置输入输出的宽度。宽度的设置可用于输入,但只对字符串输入有效。对于输出,宽度是指最小输出宽度。当实际数据宽度小于指定的宽度时,多余的位置用填充字符(通常是空格)填满;当实际数据的宽度大于设置的宽度时,仍按实际的宽度输出。默认时,在设置的宽度内右对齐显示内容。选项A和D中没有指定宽度,而Left设置输出数据在指定宽度内左对齐,因此Left存在与否对输出效果没有影响。选项B和C中指定输出宽度为5,选项C中输出字符串ABCDE,字符串ABCDE的宽度为6大于设置的输出宽度5,仍按实际宽度输出,因此Left存在与否对选项C的输出效果没有影响;选项D中输出357,357的宽度小于指定的宽度5,多出的部分用空格填满,输出结果为:357 ,当去掉Left时,输出时数值右对齐,输出结果为: 357。故本题答案为B。24. 有如下程序:#includeusing namespace std;class VACpublic: int f()constreturn 3; int f()return 5;int main() VAC v1; const VAC v2; coutv1.f()v2.f(); return 0;运行时的输出结果是_。A、53B、35C、55D、3324. 本题考查的是一般成员函数和常成员函数。当类中只有一个常成员函数时一般对象也可以调用该常成员函数。但当两个同名的一般成员函数和常成员函数同时存在时,常对象调用常成员函数,一般对象调用一般成员函数。本题中存在两个同名的一般成员函数和常成员函数f,v1为类VAC的一般对象,它只能调用一般成员函数f,因此v1.f() 返回5;v2为类VAC的常对象,它只能调用常成员函数f,因此v2.f()返回3。故本题最后输出53。故本题答案为A。28. 有如下类和对象的定义:class Constantspublic: static double getPI()return 3.1416;Constants constants;下列各组语句中,能输出3.1416的是_。A、coutgetPI();和coutConstants:getPI();B、coutconstants.getPI();和coutConstants.getPI();C、coutgetPI();和coutgetPI();D、coutconstants.getPI();和cout运算符访问对象的成员。其中,.运算符用于一般对象和引用对象,而-运算符适用于指针对象(即指向对象的指针)。访问静态函数成员可以采用下面的方式::()或对象名.函数名故本题答案为D。21. 有如下程序:#includeusing namespace std;class MyClasspublic: MyClass(int x):val(x) void Set(int x)val=x; void Print()constcoutval=valt;private: int val;int main() const MyClass obj1(10); MyClass obj2(20); obj1.Print(); /语句1 obj2.Print(); /语句2 obj1.Set(20); /语句3 obj2.Set(30); /语句4 return 0;其主函数中错误的语句是_。A、语句1B、语句2 C、语句3D、语句421. 本题主要考查了常对象。使用const关键字修饰的对象称为常对象,它的定义格式如下: const 或const ,常对象在定义时必须进行初始化,而且不能被更新。由于对象obj1为常对象,所以对象obj1的数据成员val不能被更新,且对象obj1只能调用它的常成员函数,而成员函数Set不是常成员函数,故语句3不正确。故本题答案为C。31. 有如下程序:#includeusing namespace std;class MyClasspublic: MyClass(int i=0)cout1; MyClass(const MyClass&x)cout2; MyClass& operator =(const MyClass&x)cout3;return *this; MyClass()cout4;int main() MyClass obj1(1),obj2(2),obj3(obj1);return 0;运行时的输出结果是_。A、112444B、11114444C、121444D、1131444431. 本题主要考查了构造函数、拷贝构造函数和析构函数。构造函数在对象被创建的时候由系统自动调用,析构函数在对象的生存期即将结束的时候由系统自动调用,拷贝构造函数发生在用一个已知的对象初始化一个正在创建的同类对象的时候。在main()函数中,语句MyClass obj1(1),obj2(2),obj3(obj1);创建了三个对象,在创建obj1和obj2对象时系统分别自动调用类的构造函数一次,此时输出2个1,在创建obj3对象时是用已创建的对象obj1初始化,系统自动调用拷贝构造函数一次,输出1个2,最后main函数通过return语句返回,此时系统自动调用析构函数3次销毁前面定义的三个对象,因此会输出3个4。故本题最终输出的结果为112444。故本题答案为A。49. 有如下程序:#includeusing namespace std;int fun1(int x) return +x;int fun2(int &x) return +x;int main() int x=1,y=2; y=fun1(fun2(x); coutx,y; return 0;程序的输出结果是_。49.本题主要考查了函数的嵌套调用及参数值的传递。执行到语句y=fun1(fun2(x);时,先以变量x为实参调用函数fun2,函数fun2中的参数采用引用传值方式,即函数中对形参值的改变同样作用于实参上,调用函数fun2后,实参变量x的值为2,函数返回值为2,再以该返回值2作为实参调用函数fun1,返回值为3,然后将函数fun1的返回值3赋给变量y。故程序的输出结果为2,3。32. 有如下程序:#includeusing namespace std;class AA int k;protected: int n; void setK(int k) this-k=k;public: void setN(int n) this-n=n;class BB:public AA/*类体略*/;int main() BB x; x.n=1; /1 x.setN(2); /2 x.k=3; /3 x.setK(4); /4 return 0;在标注号码的四条语句中正确的是_。A、1B、2C、3D、432. 本题主要考查了派生类对象对基类成员的访问。类BB公有继承类AA,类AA的公有成员函数setN()成为类BB的公有成员,类AA的保护数据成员n和保护成员函数setK()成为类BB的保护成员,通过派生类对象只能访问派生类的公有成员,因此选项B正确,不能访问派生类的私有成员和保护成员,因此选项A和选项D错误;无论哪种继承方式,派生类BB的对象都不能访问基类AA中的私有成员,因此选项C错误。故本题答案为B。41. 有如下程序段:char c20=examination;c4=0;coutcendl;执行这个程序段的输出是_。41. 本题主要考查了字符串的输入/输出。字符串整体输入/输出时,要注意:输出的字符不包括字符串结束符0,输出字符串时,输出项是字符数组名,输出时遇到字符串结束符0结束。本程序段先定义了一个有20个元素的字符数组c,并赋初值examination,然后执行语句c4=0;c4的值为ASCII码值为0的字符,即c4的值为字符串结束符0,又数组下标从0开始,因此执行语句coutcendl;后输出exam。42. 下面的函数利用递归实现了求1+2+3.+n的功能:int sum(int n) if( n=0 ) return 0; else return n+sum(n-1);在执行sum(10)的过程中,递归调用sum函数的次数是_。42. 本题主要考查了递归函数。递归函数即自调用函数,在函数体内部直接或间接地自己调用自己,即函数嵌套调用的是函数本身。本题中sum()函数共被调用了11次,第一次是由其它函数调用,不属于递归调用,以后的10次由自己调用自己,属于递归调用。50. 有如下程序:#includeusing namespace std;class Animal public: virtual char* getType() const return Animal; virtual char* getVoice() const return Voice;class Dog:public Animalpublic: char* getType() const return Dog; char* getVoice() const return Woof;void type(Anima
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版监控系统维保合同范本
- 2024版单位车辆出租协议
- 2025年事业单位工勤技能-河北-河北水文勘测工四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河北-河北工程测量工四级(中级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广西-广西家禽饲养员四级(中级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西医技工一级(高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西保健按摩师一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东动物检疫员五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东下水道养护工五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-安徽-安徽机械冷加工一级(高级技师)历年参考题库典型考点含答案解析
- 诱思探究理论
- 浅析中国保险业发展现状
- 铣床日常点检保养记录表
- 农产品贮藏与加工教案
- 04某污水处理厂630kW柔性支架光伏发电项目建议书
- 2022中国移动通信集团重庆限公司招聘上岸笔试历年难、易错点考题附带参考答案与详解
- 北师大版九年级数学上九年级第一二单元综合数学试题
- 二级建造师成绩复核申请
- GB/T 25702-2010复摆颚式破碎机颚板磨耗
- GB 29541-2013热泵热水机(器)能效限定值及能效等级
- 住宅项目实测实量操作指引(图文并茂)
评论
0/150
提交评论