面向对象程序设计知识题

上传人:壹****1 文档编号:498209107 上传时间:2023-08-25 格式:DOCX 页数:53 大小:50.13KB
返回 下载 相关 举报
面向对象程序设计知识题_第1页
第1页 / 共53页
面向对象程序设计知识题_第2页
第2页 / 共53页
面向对象程序设计知识题_第3页
第3页 / 共53页
面向对象程序设计知识题_第4页
第4页 / 共53页
面向对象程序设计知识题_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《面向对象程序设计知识题》由会员分享,可在线阅读,更多相关《面向对象程序设计知识题(53页珍藏版)》请在金锄头文库上搜索。

1、1 面向对象程序设计中的数据隐藏指的是参考答案为:DA .输入数据必须输入保密口令B .数据经过加密处理C.对象内部数据结构上建有防火墙D.对象内部数据结构的不可访问性解析输入数据必须输入保密口令和数据经过加密处理都不是面向对象程序设计的特征;对 象内部数据结构上也不可能建有防火墙所以它们都不是面向对象程序设计中所指的数据隐 藏。面向对象程序设计系统中的封装单位是对象,对象之间只能通过接口进行信息交流,外 部不能对对象中的数据随意地进行访问,这就造成了对象内部数据结构的不可访问性,也使 得数据被隐藏在对象中。这就是面向对象程序设计中的数据隐藏所指。2 .下列各项中符合函数重载必须满足的条件的是

2、参考答案为:DA .必须有不同的参数个数B .对应的参数类型必须不相同C. A和B必须同时满足 D.A和B只要满足一个即可解析我们知道,在同一个作用域中,要实现函数重载必须满足的条件的是: 有不同的 参数个数或者对应的参数有不相同的数据类型即和中只要有一个满足就可以了。 当然两者都满足更好,但这不是必须的。3.下列带缺省值参数的函数说明中,正确的说明是参考答案为:AA . int Fun(int x,int y=2,int z=3); B . int Fun(int x=1,int y,int z=3);C. int Fun(int x,int y=2,int z); D . int Fun(

3、int x=1,int y,int z=3);解析在带缺省值参数的函数说明中,正确的说明应该是无缺省值的参数依次排列在参数表 的左边,排完无缺省值的参数后,再依次排列带缺省值的参数。从所给出的四个选项来看, 只有int Fun(int x,int y=2,int z=3)符合这条规定,其它的都不符合。4 .有如下的对类“CSample”的说明,其中()是错误的。A . int a=23;B . CSample();public:C . CSample(int val);D .CSample();解析在上面对类“CSample说明中,CSample()和“CSample(int val)”是该类

4、重载 的构造函数、CSample()”是该类的析构函数,这三个语句都是正确的。错误的语句是 “int a=23”,因为它违反了在类的声明(不管是引用性声明,还是定义性声明)中都不能以赋值表达式的形式给它的数据成员进行初始化。5.已知类A中的一个成员函数的说明如下:void Set(A &a);贝U该函数的参数“A &a”的含义是参考答案为:CA .指向A的指针为aB. 将变量a的地址赋给类AC. 类A对象引用a用作函数的形参D .变量A与a按位与后作函数参数解析因为A是一个类,所以“A &a”表示a是类A的对象,但因为对象a的前缀了符号 “&”,则“&a”表示是类A的对象引用。所以“A &a”

5、的含义是类A对象引用a用作函数的形参。6 .若类A和类B的定义如下:public:int i,j;void get();;class B:A (int i,j ;protected:int k ;public:void make();void B:make() ( k=i*j ; 则其中()是非法的表达式。参考答案为:DA . void get();B . int k ;C . void make();D . k=i*j ;解析对于给定的四项中,前三项都是正确的,只有第四项是错误的。因为,类B是类 A的私有派生类(缺省访问类型),所以A中的公类型的数据成员在类B中成为了私有数据 成员,但函数“

6、void B:make()”既然是类B的成员函数,则既可访问类A中的公有数据成 员,也能访问类B中的私有数据成员,则表达式k=i*j;造成了访问的二义性,即其中的 i和j,到底是取自类A呢?还是取自类B呢?7. 下面的主程序中,语句()是错误的。class A (int i;public:virtual void fun()=0;A(int a) ( i=a; ;class B (int j;public:void fun() coutsalary;C . x二worker.salary;(其中worker为具有类类型的对象)D . Location &rA=A1;int x=rA . Get

7、X(); ( Location 为已定义的类,A1 为对象)解析因pointer为指向类对象的指针,所以“pointer-salary”是正确的访问数据成 员的形式;因worker为具有类类型的对象,所以Worker.salary”也是正确的访问数据成 员的形式;因Location为已定义的类,A1为对象,所以Location &rA=A1;int x=rA .GetX();表示以对象A1初始化对象引用於,然后由对象引用rA调用成员函数GetX() 给变量x赋值,这样的访问成员函数的形式也是正确的;*pointer.salary;中,因为运算 符.的优先级高于运算符*的优先级,所以相当于*(p

8、ointer.salary);,那正确 的形式应该是*(pointeLsalary);。故*pointer.salary”是不正确的访问。11 .C+对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是()DA.增加了一些新的运算符B.允许函数重载,并允许设置缺省参数C.规定函数说明 符必须用原型D.引进了类和对象的概念12 .下列符号不能组成标识符的是(A ) A.连接符B.下划线C.大小写字母D.数字字符13 .类型修饰符 unsigned 不能修饰(D ) A. char B. int C. long int D. float14 .在int a = 3,int *p=&a ;中

9、,*p的值是(D) A.变量a的地址值B.无意义C.变 量p的地址值D.315 .下列关于指针的操作中,错误的是(D ) A.两个同类型的指针可以进行比较运算B.可 以用一个空指针赋给某个指针C. 一个指针可以加上两个整数之差D.两个同类型的指针 可以相加二,填空题不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。1. 面向对象程序设计中的多态性包括静态多态性和动态多态性,前者由机制支持,而后者则由机制支持。答:函数重载、虚函数解析静态多态性又称编译时多态性,调用何函数应该在编译之前就知道了,所以必须由函 数重载机制来支持。动态多态性又称运行时多态性,调用何函数只有在运行时才知道

10、,所以 由虚函数(与指针或引用)机制来支持。2 .由char const *str=stucture;所以定义的指针称为,关键字const所 修饰的。答:指向常量的指针、指针所指的字符串解析根据由*在修饰符const中位置的不同,它所修饰的对象也不同,const 表示所修饰的是指针所指的常量,该指针称为指向常量的指针;* const表示所修饰的是 指针本身,该指针称为常指针;* const *则表示所修饰的是指针本身和指针所指常量, 该指针称为指向常量的常指针。3 .引入虚基类的目的是为了解决多重继承中的和问题。答:二义性、多占用空间解析在允许多重继承时可能出现两个问题,第一个是公有派生类中的

11、成员通过不同基类调 用它们上一级公共基类的同一成员,这就产生了调用的二义性;每一个基类都为它们的上一 级公共基类存有备份,这就引起了公共基类的重复存储,也就多占了存储空间。引入虚基类 的目的是为了解决多重继承中的这两个问题。4 .构造函数与析构函数所调用的虚函数是 的函数,因此调用时实现的是 联编。答:所在类、静态解析在生成派生类的对象时,先调用基类的构造函数生成基类对象,再调用派生类的构造 函数来生成派生类对象。所以当在构造函数中调用虚函数时,当调用基类的构造函数时,此时派生类还未生成,所以它只能调用自己的虚函数;调用派生类构造函数时,它也只能调用 自己的虚函数,因为虚函数的调用是不能由派生

12、类调用基类的。在析构派生类对象是时,先 调用派生类的析构函数析构掉派生类对象,再调用基类的析构函数来析够掉基类的对象。所 以当在析够构函数中调用虚函数时,派生类的析构函数调用的是它自己的虚函数(原因同构 造函数),基类的析构函数调用的也是它自己的虚函数,因为此时派生类对象以已被析构掉 了。由上可见,当构造函数与析够函数调用虚函数时,它们调用的都是自己类的函数,因此 调用时实现的是静态联编。7 .说明一个const成员函数(又称常量成员函数)的方法是,将const写在之间,而且它修饰的。答:函数头与函数体、this指针解析为了说明一个常量成员函数的方法是,将const写在函数头的右圆括号J与函数 体的左花括号之间,而且它修饰的是对象所属的this指针。表示该函数不能修改它所 在对象中的数据成员的值。20 .对某个运算符的重载,实际上是用关键字与该运算符组成一个运算符函数,而且该运算符函数的返回类型不能 勺。答:operater、void解析对某个运算符的重载实际上是用关键字。perater与该运算符组成一个运算符函数, 而且该运算符函数的返回类型不能是无类型的,即不能是void的。三改错题1. 分析下列程序中的错误,并说明出错原因。# includeconst int n;public:base() ( cout I

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号