CPP复习题答案.doc
《CPP复习题答案.doc》由会员分享,可在线阅读,更多相关《CPP复习题答案.doc(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、选择题1 C+语言本身没有定义I/O操作,C+标准库iostream提供了基本的I/O类。I/O操作分别由两个类istream和( C )提供,由它们派生出一个类iostream,提供双向I/O操作。A. fstreamB. iostreamC. ostream D. cout2. 引入内联函数的主要目的是( B )。A. 缩短程序代码,少占用内存空间B. 既可以保证程序的可读性,又能提高程序的运行效率C. 占用内存空间少,执行速度快D. 使程序的结构比较清晰3. 重载函数是( A )A. 以函数参数来区分,而不用函数的返回值来区分不同的函数B. 以函数的返回值来区分,而不用函数参数来区分不同
2、的函数C. 参数表完全相同而返回值类型不同的两个或多个同名函数D.参数表和返回值类型都必须是不同的两个或多个同名函数4. 在C+中,数据封装要解决的问题是( D )。A. 数据的规范化B. 便于数据转换C. 避免数据丢失D. 防止不同模块之间数据的非法访问5. 下列特性中,( B )不是面向对象的程序设计的特征。A.继承B.内联函数C.多态性D.封装6. 类B的对象必定是类A的对象,但是类A的对象却不属于类B,则类B和类A之间的关系是( C )。A. 组合关系B. 间接关系C. 继承关系D. 直接关系7. 下面对于友元函数描述正确的是( C )。A. 友元函数的实现必须在类的内部定义B.友元函
3、数是类的成员函数C. 友元函数破坏了类的封装性 D.友元函数不能访问类的私有成员8. 以下关于析构函数的描述中( C )是错误的。A.析构函数声明和定义中没有形参 B.析构函数可以定义为内联函数。C.析构函数可以重载 D.析构函数可以定义为虚函数。9. 下面叙述错误的是( A )。A. 基类的protected成员在派生类中仍然是protected的B. 基类的protected成员在public派生类中仍然是protected的。C. 基类的protected成员在private派生类中是private的。D. 基类的protected成员不能被派生类的对象访问。10. 如果一个类至少有一个
4、纯虚函数, 那么就称该类为( A )。A. 抽象类 B. 虚基类C. 派生类 D. 以上都不对11. 当公有继承时,基类的( D )在派生类中成为保护成员,不能通过派生类的对象来直接访问该成员。A.任何成员 B.公有成员和保护成员C.保护成员和私有成员 D.保护成员12. 当私有继承时,基类的( A )在派生类中成为私有成员,不能通过派生类的对象来直接访问该成员。A. 任何成员 B.公有成员和保护成员C. 保护成员和私有成员 D.私有成员13. 派生类的对象对它的基类成员中( A )是可以采用对象或者对象指针-的方式访问的。A. 公有继承的公有成员B. 公有继承的私有成员C. 公有继承的保护成
5、员D. 私有继承的公有成员14. 关于纯虚函数和抽象类的描述中,错误的是( C )。A. 纯虚函数是一种特殊的虚函数,它没有具体的实现。B. 抽象类是指具有纯虚函数的类。C. 一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类。D. 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。15.下列说法错误的是( C )。A.若语言只支持类而不支持多态,则不能称为面向对象的。B.在运行时根据其类型确定调用哪个函数的能力叫多态性。C.静态多态性也是在运行时根据其类型确定调用哪个函数。D.C+中的静态多态性是通过函数重载进行实现的。16. ( D )不是构造函数的特征A. 构造函数的函数名与
6、类名相同。B. 构造函数可以重载。 C. 构造函数可以设置缺省参数。D. 构造函数必须指定类型说明。17下列标识符中, A 不是C+的关键字; A. cinB. privateC. this D. operator18下列标识符中, A 不是C+的关键字; A. coutB. virtualC. this D. template18下列标识符中, A 不是C+的关键字; A. coutB. publicC. this D. sizeof19下列标识符中, A 不是C+的关键字; A. coutB. deleteC. this D. sizeof20下列标识符中, A 不是C+的关键字; A.
7、coutB. new C. this D. void21引用是一个变量的别名, 下列关于的引用的描述,正确的是( A )。A引用的值与被引用变量的值相等,内存地址相同;B引用的值与被引用变量的值相等,内存地址不相同;C引用的值与被引用变量的值不等,内存地址相同;D引用的值与被引用变量的值不等,内存地址不同;22公有继承时,子类的访问接口由( D )组成: A父类的非私有成员和子类的非私有成员; B父类的公有成员和子类的非私有成员; C父类的非私有成员和子类的公有成员; D父类的公有成员和子类的公有成员;23公有继承时,子类对象只可访问父类中的( B )和子类自己的公有成员。 A非私有成员; B
8、公有成员; C私有成员; D保护成员;24公有继承时,子类成员函数不可以直接访问父类中( C )。 A非私有成员; B公有成员; C私有成员; D保护成员;25公有继承时,子类对象和子类成员函数必须通过父类( A )的成员函数访问父类私有成员。 A非私有; B非公有; C静态; D私有;26下列关于虚函数的描述,正确的是( C )。 A静态成员函数可以是虚函数; B构造函数可以是虚函数; C析构函数可以是虚函数; D内联函数可以是虚函数;27下列关于虚函数的描述,正确的是( B )。 A静态成员函数可以是虚函数; B构造函数不可以是虚函数; C析构函数不可以是虚函数; D内联函数可以是虚函数;
9、28下列关于虚函数的描述,错误的是( B )。 A静态成员函数不可以是虚函数; B构造函数可以是虚函数; C析构函数可以是虚函数; D内联函数不可以是虚函数;29下列关于虚函数的描述,错误的是( C )。 A静态成员函数不可以是虚函数; B构造函数不可以是虚函数; C析构函数不可以是虚函数; D内联函数不可以是虚函数;注:静态成员函数不能是虚函数;内联函数不能是虚函数;构造函数不能是虚函数;析构函数可以是虚函数,且通常声明为虚函数。填空题1. 在C+程序中,使用基本输入输出流需要包含的头文件是 “iostream.h” 。2. 具有相同函数名但具有不同参数表的函数称为 重载函数 。3. 在一个
10、函数的定义或声明前加上关键字 inline 时,该函数就声明为内联函数。4. 当一个类对象的成员函数被调用时,该成员函数的 this 指针指向调用它的对象。5.在撤销类的对象时,C+程序将自动调用该对象的 析构 函数。6. 对类中的成员函数和属性的访问是通过 public 、 private 和 protected 这3个关键字来控制的。7. 当用public继承从基类派生一个类时,基类的public成员成为派生类的_public_成员,protected成员成为派生类的_ protected _ 成员。8. 有如下定义语句:MyClassp10,*q;则系统自动调用该类构造函数 10 次。当
11、类对象数组p离开它的作用域时,系统自动调用该类析构函数 10 次。9. 在类定义中,将 =0 置于虚函数的函数原型的末尾可以将该函数声明为纯虚函数。10. 带有 纯虚函数 的类称为抽象类,它只能作为 其他派生类的基类 来使用。11. 假定用户没有给一个名为MyClass的类定义析构函数,则系统为其定义的默认析构函数形式为 MyClass:MyClass() 。12. 有如下定义语句:MyClass*p;,则执行p=newMyClass;语句时,将自动调用该类的 构造函数 。执行deletep;语句时,将自动调用该类的 析构函数 。13. 有如下对象数组定义语句:MyClass *p10;当对象
12、指针数组p离开它的作用域时,系统自动调用该类析构函数 0 次。/指针不调用,申请内存时才调用。14. 在结构定义中,数据和成员函数默认权限是公有的。在类定义中,数据和成员函数默认权限是 私有的 。15C是混合性程序设计语言,既支持面向过程,又支持面向 对象 。16面向对象程序设计的三大特点: 封装 、 继承 、 多态 。17重载函数调用时,编译器按返回类型、参数类型、参数个数、参数顺序进行匹配,重载函数至少在 参数个数 、 参数类型、 或 参数顺序 上有所不同。18函数模板比函数重载的表达更简洁,但只有 参数个数相同 、 函数体 相同,仅 类型 不同的函数才能定义模板。19void型指针是通用
13、型指针, 任何 类型的指针值都可以赋给void类型指针,但使用时必须进行 显式 转换,否则出错。20在程序中使用运算符new申请内存,应该相应地使用运算符 delete 来释放申请的内存。22JAVA是纯面向对象语言,C+是混合性程序设计语言,混合语言的特点是既支持传统的程序设计方法,又支持 面向对象 程序设计方法。23类是 数据 和 代码 的复合体。/ 数据(成员) 和(成员)函数 也OK!24类可以有 多 个构造函数,有 一 个析构函数。25若类中一个构造函数都没有,则C+自动提供一个无参数的 默认构造函数 ,负责创建对象。26类中 const数据成员 和 引用 类型的数据成员必须在该类的
14、对象建立的同时进行初始化,这种初始化只能用成员初始化列表进行。27在类中使用 static 声明的成员称为静态成员。28静态成员函数在类中只有语法上的作用,它不是对象的成员,没有 this 指针,必须将对象作为参数传入,才能在静态成员函数访问该对象的成员。29友元函数是对设计类时未定义完整操作集的补充,是类外的函数,它不是对象的成员函数,没有 this 指针,必须将对象作为参数传入。30C程序是由一组 函数 组成的,C+面向对象程序是由一组 类 组成的。31面向对象的程序设计主要是类的设计,在编译时,一个面向对象的系统由 类 组成,在运行时,系统由 对象 组成。32 单一 继承形成一个倒挂的树
15、; 多重 继承形成一个有向无环图。33当类中包含虚拟函数时,C+编译器为类加上一个 虚函数 指针,该指针指向虚拟函数表。34当类中包含虚拟函数时,C+编译器为类加上一个虚函数指针,该指针指向 虚拟函数表。35包含虚拟函数的类通过 vptr指针 和 虚拟函数表 可以在程序运行时依据指针实际指向的对象调用对应的虚拟函数,从而实现多态,达到动态绑定的目的。36派生类的对象可以赋给基类的对象;由于基类对象不具有派生类对象所具有的成员,因此 基类 的对象不可以赋值给 派生类 对象。37运算符重载的实质就是 函数重载 。通过运算符重载可以使应用于基本数据类型的运算符作用于用户自定义数据类型。问答题:1.
16、面向过程和面向对象在程序组织方式上的差别? 面向过程的核心是功能的分解,最终的程序由过程构成,将数据结构和过程作为两个实体对待,着重点在过程。缺点就是一旦数据结构需要变更,需修改与之有关的所有模块。 面向对象中数据构成软件分解的基础,而不是功能,数据与定义在在它上面的用户需要构成整体,数据本身不能被外部程序和过程直接存取。程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。程序中的一切操作都是通过向对象发送消息来实现,对象接收到消息后,启动有关方法完成操作。类由继承关系产生相互的联系。2. C+中采用类的概念将数据以及处理数据的函数封装在一起的好处? C+
17、采用类(class)的概念将数据以及处理数据的函数封装在一起,将一部分行为作为外部访问的接口与外部发生联系,而将数据和其他行为进行有效隐藏,就可以达到对数据访问权限的合理控制。通过这种有效隐藏和合理控制,就可以增强数据的安全性,减轻开发软件系统的难度。3.面向对象程序设计具有哪三大特点及其目的? 封装,继承,多态 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或对象操作,对不可信的进行信息隐藏。 继承:可以使用类的现有类的所有功能,并在无需编写原来类的情况下对这些功能进行扩展。 多态:允许将子类类型的指针赋值给父类类型的指针。4.C+程序设计语言中this指针的
18、作用? 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。5.C+程序设计语言中虚函数指针和虚函数表的作用? C+编译器为每个“内含虚拟函数的类”建立一个虚拟函数表(vtable),表中每一个指针元素指向一个虚拟函数的地址,编译器为类加上一个成员变量vptr,vptr是一个指向虚拟函数表的指针
19、。每一个派生类的对象,都有一个vptr,对象调用虚拟函数就是通过vptr找到虚拟函数表,再找到虚拟函数的真正地址。虚拟函数表的内容是依据类中的虚拟函数声明次序一一填入函数指针。派生类继承基类的虚拟函数表,派生类中改写虚拟函数,虚拟函数表中元素所指的函数地址不再是基类的函数地址,而是派生类的函数地址。包含虚拟函数的类通过vptr指针和虚拟函数表可以在程序运行时依据指针实际指向的对象调用对应的虚拟函数,从而实现多态(Polymorphism)。为了达到动态绑定的目的,虚拟函数是了解多态(Polymorphism)以及动态绑定的关键,同时也是了解如何使用MFC的关键。6.C+程序设计语言是如何实现多
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CPP 复习题 答案
限制150内