《2021年面向对象程序设计习题》由会员分享,可在线阅读,更多相关《2021年面向对象程序设计习题(24页珍藏版)》请在金锄头文库上搜索。
1、.1 面对对象程序设计中的数据隐匿指的是参考答案为:DA输入数据必需输入保密口令B数据经过加密处理C. 对象内部数据结构上建有防火墙D对象内部数据结构的不行拜访性解析输入数据必需输入保密口令和数据经过加密处理都不是面对对象程序设计的特点;对象内部数据结构上也不行能建有防火墙,所以它们都不是面对对象程序设计中所指的数据隐匿;面对对象程序设计系统中的封装单位是对象,对象之间只能通过接口进行信息沟通,外部不能对对象中的数据随便地进行拜访,这就造成了对象内部数据结构的不行拜访性,也使得数据被隐匿在对象中;这就是面对对象程序设计中的数据隐匿所指;2 以下各项中符合函数重载必需满意的条件的是参考答案为:D
2、A 必需有不同的参数个数B对应的参数类型必需不相同C. A和B必需同时满意DA和B只要满意一个即可解析我们知道,在同一个作用域中,要实现函数重载必需满意的条件的是: 有不同的参数个数;或者 对应的参数有不相同的数据类型,即和中只要有一个满意就可以了;当然两者都满意更好,但这不是必需的;3以下带缺省值参数的函数说明中,正确的说明是参考答案为:AAint Funint x,int y=2,int z=3;Bint Funint x=1,int y,int z=3;C. int Funint x,int y=2,int z;Dint Funint x=1,int y,int z=3;解析在带缺省值参
3、数的函数说明中,正确的说明应当是无缺省值的参数依次排列在参数表的左边,排完无缺省值的参数后,再依次排列带缺省值的参数;从所给出的四个选项来看,只有“int Funint x,int y=2,int z=3”符合这条规定,其它的都不符合;4有如下的对类“CSample”的说明,其中( )是错误的; class CSample 参考答案为:AAint a=23;BCSample;public:CCSampleint val;D CSample;解析在上面对类“CSample”说明中,“CSample”和“CSampleint val”是该类重载的构造函数、“ CSample”是该类的析构函数,这三
4、个语句都是正确的;错误的语句是“int a=23”,由于它违反了在类的声明(不管是引用性声明,仍是定义性声明)中都不能以赋值表达式的形式给它的数据成员进行初始化;5已知类A中的一个成员函数的说明如下:void SetA &a;就该函数的参数“A &a”的含义是参考答案为:CA指向A的指针为aB将变量a的地址赋给类AC类A对象引用a用作函数的形参D变量A与a按位与后作函数参数解析由于A是一个类,所以“A &a”表示a是类A的对象,但由于对象a的前缀了符号“&”,就“&a”表示是类A的对象引用;所以“A &a”的含义是类A对象引用a用作函数的形参;6如类A和类B的定义如下:class A 精品.
5、public:int i,j;void get;class B:A int i,j;protected:int k;public: void make;void B:make k=i*j; 就其中()是非法的表达式;参考答案为:DAvoid get;Bint k;Cvoid make;Dk=i*j;解析对于给定的四项中,前三项都是正确的,只有第四项是错误的;由于,类B是类A的私有派生类(缺省拜访类型),所以A中的公类型的数据成员在类B中成为了私有数据成员,但函数“void B:make”既然是类B的成员函数,就既可拜访类A中的公有数据成员,也能拜访类B中的私有数据成员,就表达式“k=i*j;”
6、造成了拜访的二义性,即其中的i和j,究竟是取自类A呢?仍是取自类B呢?7下面的主程序中,语句( )是错误的;class A int i;public:virtual void fun=0;Aint a i=a; ;class B int j;public:void fun coutsalary;Cx=worker.salary; (其中worker为具有类类型的对象)DLocation &rA=A1;int x=rAGetX; (Location为已定义的类,A1为对象)解析因pointer为指向类对象的指针,所以“pointer-salary”是正确的拜访数据成员的形式;因worker为具有
7、类类型的对象,所以“worker.salary”也是正确的拜访数据成员的形式;因Location为已定义的类,A1为对象,所以“Location &rA=A1;int x=rAGetX;”表示以对象A1初始化对象引用rA,然后由对象引用rA调用成员函数GetX给变量x赋值,这样的拜访成员函数的形式也是正确的;“*pointer.salary;”中,由于运算符.的优先级高于运算符*的优先级,所以相当于“*(pointer.salary);”,那正确的形式应当是“*(pointersalary);”;故“*pointer.salary”是不正确的拜访;11 C+ 对 C 语言作了很多改进,即从面对
8、过程变成为面对对象的主要缘由是 DA. 增加了一些新的运算符 B. 答应函数重载,并答应设置缺省参数 C. 规定函数说明符必需用原型 D. 引进了类和对象的概念 12 以下符号不能组成标识符的是 A A. 连接符 B. 下划线 C. 大小写字母 D. 数字字符 13 类型修饰符 unsigned 不能修饰 D A. char B. int C. long int D. float 14在 int a=3,int *p=&a ;中, *p 的值是 D A. 变量 a 的地址值 B. 无意义 C. 变量 p 的地址值 D.3 15以下关于指针的操作中,错误选项 D A. 两个同类型的指针可以进行比
9、较运算 B. 可以用一个空指针赋给某个指针 C. 一个指针可以加上两个整数之差 D. 两个同类型的指针可以相加二,填空题不写解答过程,将正确的答案写在每道题的空格内;错填或不填均无分;1面对对象程序设计中的多态性包括静态多态性和动态多态性,前者由_机制支持,而后者就由_机制支持;答:函数重载、虚函数精品.解析静态多态性又称编译时多态性,调用何函数应当在编译之前就知道了,所以必需由函数重载机制来支持;动态多态性又称运行时多态性,调用何函数只有在运行时才知道,所以由虚函数(与指针或引用)机制来支持;2由char const *str=”stucture”;所以定义的指针称为_,关键字const 所
10、修饰的是_;答:指向常量的指针、指针所指的字符串解析依据由*在修饰符“const”中位置的不同,它所修饰的对象也不同,“const ”表示所修饰的是指针所指的常量,该指针称为指向常量的指针;“* const”表示所修饰的是指针本身,该指针称为常指针;“* const *”就表示所修饰的是指针本身和指针所指常量,该指针称为指向常量的常指针;3引入虚基类的目的是为明白决多重继承中的_和_问题;答:二义性、多占用空间解析在答应多重继承时可能显现两个问题,第一个是公有派生类中的成员通过不同基类调用它们上一级公共基类的同一成员,这就产生了调用的二义性;每一个基类都为它们的上一级公共基类存有备份,这就引起
11、了公共基类的重复储备,也就多占了储备空间;引入虚基类的目的是为明白决多重继承中的这两个问题;4构造函数与析构函数所调用的虚函数是_的函数,因此调用时实现的是_联编;答:所在类、静态解析在生成派生类的对象时,先调用基类的构造函数生成基类对象,再调用派生类的构造函数来生成派生类对象;所以当在构造函数中调用虚函数时,当调用基类的构造函数时,此时派生类仍未生成,所以它只能调用自己的虚函数;调用派生类构造函数时,它也只能调用自己的虚函数,由于虚函数的调用是不能由派生类调用基类的;在析构派生类对象是时,先调用派生类的析构函数析构掉派生类对象,再调用基类的析构函数来析够掉基类的对象;所以当在析够构函数中调用虚函数时,派生类的析构函数调用的是它自己的虚函数(缘由同构造函数),基类的析构函数调用的也是它自己的虚函数,由于此时派生类对象以已被析构掉了;由上可见,当构造函数与析够函数调用虚函数时,它们调用的都是自己类的函数,因此调用时实现的是静态联编;7说明一个const成员函数(又称常量成员函数)的方法是,将const写在_之间,而且它修饰的是_;答:函数头与函数体、this指针解析为了说明一个常量成员函数的方法是,将const写在函数头的右圆括号