版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、类与对象习题11第四章类与对象习题基本概念与基础知识填空题(知识点)4.1.1 引入类定义的关键字是(1)。类的成员函数通常指定为,类的数据成员通常指定为(3)。指定为(4)的类成员可以在类对象所在域(5)成员表示类的属性,用类的 中的任何位置访问它们。通常用类的 成员表示类的操作。答案:(1) class(2) 公有的public(3) 私有的 private(4) 公有的public 数据(6) 函数4.1.2 类的访问限定符包括(1)、(2) 和(3)。私有数据通常由(4)函数来访问(读和写)。这些函数统称为(5)。答案:(1) public (公有的)(2) private (私有的)
2、(3) protected (保护的)(4) 公有的成员函数(5) 类的接口4.1.3 通常在逻辑上,同一类的每个对象都有(1)代码区,用以存储成员函数。而在物理上通常只有(2)代码区。只有在(3)定义,并 (4) 的函数和加了关键字的函数例外。答案:(1) 独立的(2) 共用的(3) 在类说明中(4) 不包括循环等复杂结构 inline4.1.4 C+中支持三种域:(1)、(2)、(3)。函数域被包括在(4)中,全局域被包括在(5)中。using指示符以关键字using开头,后面是关键字(6),最后是 (7)。这样表示以后在该名字空间中所有成员都(8)。如不使用using指示符则在使用时要加
3、::,称为(9)运算符。答案:(1) 局部域(local scope)(2) 名字空间域(namespace scope(3) 类域(class scop®(4) 局部域(5) 名字空间域(6) namespace(7) 名字空间名(8) 可以直接被使用(9) 域4.1.5引用通常用作函数的 (1) 和 (2)。对数组只能引用(3)不能引用(4)。答案:(1) 参数 返回值(3) 数组元素(4) 数组名本身4.1.6 构造函数的任务是(1) 。构造函数无(2)。类中可以有(3)个构造函数,它们由(4)区分。如果类说明中没有给出构造函数,则 C+编译器会 (5)。拷贝构造函数的参数是(
4、6),当程序没有给出复制构造函数时,系统会自动提供(7) 支持,这样的复制构造函数中每个类成员(8)。答案:(1) 初始化数据成员(2) 函数返回类型说明(3) 多(4) 不同的参数表(5) 自动给出一个默认的构造函数(6) 同一类对象的引用(7) 默认的的复制构造函,称为默认的按成员语义支持。(8) 被依次复制4.1.7 一个类有(1)个析构函数。(2) 时.系统会自动调用析构函数。(1) 一(2) 对象注销时4.1.8运算符重载时,其函数名由 C1构成。成员函数重载双目运算符时,左操作数是 (2),右操作数是(3)。答案:(1) 关键字operator和该运算符 对象(3) 该函数的参数4
5、.1.9面向过程的程序设计中程序模型描述为(1),面向对象程序设计的程序模型可描述为 (2)。答案:(1) “程序=算法+数据结构”。其数据与数据处理是分离的。(2)程序=(对象+对象+对象)+消息;对象=(算法+数据结构)。面向对象设计将数 据和对数据的操作方法放在一起,形成一个相对独立的整体对象(Object),并通过简单的接口与外部联系。对象之间通过消息(Message)进行通讯。简答题(知识点)1.2.1 简单解释什么是面向对象程序设计的封装性。答:对象是一个封装体,在其中封装了该对象所具有的属性和操作。对象作为独立的基本单元,实现了将数据和数据处理相结合的思想。此外,封装特性还体现在
6、可以限制对象中数据和操作的访问权限,从而将属性“隐藏”在对象内部,对外只呈现一定的外部特性和功能。封装性增加了对象的独立性,C+通过建立数据类型一一类,来支持封装和数据隐藏。一个定义完好的类一旦建立,就可看成完全的封装体,作为一个整体单元使用,用户不需要 知道这个类是如何工作的,而只需要知道如何使用就行。另一方面,封装增加了数据的可靠 性,保护类中的数据不被类以外的程序随意使用。这两个优点十分有利于程序的调试和维护。1.2.2 C+编译器怎样对标识符进行解析 ?答:编译器对标识符的解析分两步,第一步查找在声明中用到的标识符,特别是函数成员声明中用到的参数类型,第二步是函数成员体内的标识符。1.
7、2.3 为什么说类与对象的概念是客观世界的反映?答:客观世界的事物都具有某些属性和行为(或操作),具有相同属性和行为的事物可以归属于一类,用分类的方法可以提高认识事物的效率。C+中定义的类则是通过抽象的方法将某一类事物共有的静态特征(属性)和动态特征(行为)概括出来并加以描述,而对象是类 的具体实现,所以说类与对象的概念是客观世界的反映。1.2.4 什么叫类域?为什么说类域是抽象的?答:类域是类体所包括的范围。每个类定义都引入了一个独立的类域,在类域中说明的标识符仅在该类的类域中有效。由于类只是一个说明,看上去有数据,有函数,有类型定义,但 是它并非实体,不分配内存,当然也不能运行。所以说类域
8、是抽象的。1.2.5 引用作为函数参数时为什么能实现两个实参之间的数据交换?为什么对应实参不能为引用?为什么返回值为引用的函数可以作为左值?答:引用变量是其关联变量的别名,二者在内存中占据同一个存储单元。在一个以引用作为参数的函数中,交换两个参数的值,实际上就是交换两个实参的值。 如果函数的参数是引用, 调用时需要取得实参的地址,而实参如果已经是一个地址,再进行引用将产生错误, 故对应实参不能为引用。函数返回引用实际是指明(返回)了相应的关联变量,所以声明返回值为引用的函数实 际上是将关联变量作为左值参与运算。1.2.6 什么是缺省的构造函数?缺省的构造函数最多可以有多少个?答:如果在类定义中
9、不显式地定义构造函数,C+编译器会自动产生一个缺省的构造函数,不过该函数不做具体的初始化工作。只要构造函数是无参的或者只要各参数均有缺省值的, C+编译器都认为是缺省的构造函数。缺省的构造函数只能有一个。1.2.7 拷贝构造函数用于哪三个方面?答:(1) 用类的一个对象去初始化该类的另一个对象时使用。(2) 当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。(3) 当函数的返回值是类对象,函数执行结束返回调用者时使用。1.2.8 写出含有对象成员的类的构造函数的格式,并做简单说明。答:C+中对含对象成员的类对象的构造函数有固定的格式:类名::构造函数名(参数总表):对象成员1(参数
10、名表1),对象成员2(参数名表2),对象成 员n(参数名表n)冒号后用逗号隔开的是要初始化的对象成员,附在后面的参数名表1,,参数名表n依次为调用相应对象成员所属的构造函数时的实参表。这些表中的参数通常来自冒号前的参数总表,但没有类型名。1.2.9 所有类对象未重载的赋值运算符“=”是怎样工作的?为什么它可以进行连续赋值?答:对所有的类对象,未重载的赋值运算符“=”称作缺省的按成员拷贝赋值操作符,同类对象之间可以用“=”直接拷贝。因为缺省的赋值操作返回一个对象的引用,所以它可以进 行连续赋值。1.2.10 为什么在友元函数的函数体内访问对象成员时,必须用对象名加运算符再加对象成员名?答:友元函
11、数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符".'加对象成员名。这一点和一般函数一样。1.2.12 类的静态数据成员与函数中的静态成员有何异同?答:类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用内存中,为该类所有对象公用。 函数中的静态变量也位于公用内存中,不随函数调用而重新分配,所以总是保留上次进入并执行该函数后留下的信息。1.2.13 C+中结构、联合与类三者间有何异同?答:在C+中结构(structure)与类几乎是完全一样的类型,差别仅仅在于缺省情况下结构 的成员为公有的。联合(union)是C+的导出数据类型,在语法与功
12、能上类似于结构,二 者的区别是:结构变量的各成员同时被分配了各自独立的内存区,而联合变量的各个成员的 存储开始地址都相同,所以在任一时刻联合变量只能存储一个成员。1.2.14 对象的第一特征是封装,那么由对象组成的面向对象的程序怎样建立各对象之间的有效联系?面向对象程序的组织与面向过程有什么不同?答:因为对象的操作主要用来响应外来消息并为其他对象提供服务,所以面向对象的程序利用消息传递机制来建立各对象之间的有效联系,协调各对象的运行。一个对象可以向其他对象发送消息以请求服务, 也可以响应其他对象传来的消息,完成自身固有的某些操作,从而服务于其他对象。面向过程的程序是模块化的,模块的组织具有分层
13、结构特点,层与层之间是调用关系。面向对象程序是由一个个封装的对象组成,而对象是由紧密结合在一起的算法和数据结构组成。对象之间是相互请求和相互协作的关系。1.2.15 类的成员函数在什么情况下应该定义为私有的?这样做的目的是什么?答:除接口函数 和创建本类对象的构造函数和撤消该对象的析构函数外。其余成员函数应该定义为私有的,这是开发类时故意对外隐蔽起来的操作,而这些往往是最复杂最关键的部分。类中故意的隐藏也为以后的升级扩展留下了余地,只要接口不变,内部再变,也不必修改原来的程序,就象 MFC (微软基础类)升级后,由 MFC底层类所编的程序完全不必修改,自 动升级。二.编程与综合练习题4.3 构
14、造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员 包括设置日期时间和输出时间,其中年、月请用枚举类型,并完成测试。(包括用成员函数和用普通函数)#include<iostream.h>class Timedateint year,month,day,hour,minute,second; enum Yearpublic:Timedate() cout4.4 设计并测试一个矩形类(Rectangle),属性为矩形的左下与右上角的坐标,矩形水平 放置。操作为计算矩形周长与面积。测试包括用成员函数和普通函数。#include<iostream.h&
15、gt;class Rectangle double point1,point2,point3,point4;public:double getpoint1() return pointl;double getpoint2() return point2;double getpoint3() return point3;double getpoint4() return point4;double girth();double area();Rectangle。 cout<<"输入矩形的左下与右上角的坐标:"<<endl;cin>>poin
16、t1>>point2>>point3>>point4; ; double Rectangle:girth() 周长 return 2*(point3-point1+point4-point2); double Rectangle:area() return (point3-point1)*(point4-point2); double girth(double point1,double point2,double point3,double point4) return 2*(point3-point1+point4-point2); double are
17、a(double point1,double point2,double point3,double point4) return (point3-point1)*(point4-point2); void main () Rectangle rectangle;cout<<"成员函数 n"<<"矩形周长:"<<rectangle.girth()<<"n 矩形面积:"<<rectangle.area()<<endl;cout<<" 普 通 函
18、 数 n"<<" 矩 形 周 长:"<<girth(rectangle.getpoint1(),rectangle.getpoint2(),rectangle.getpoint3(),rectangle.getpoint4( ) <<"n矩形面积:"<<area(rectangle.getpoint1(),rectangle.getpoint2(),rectangle.getpoint3(),rectangle.getpoint4() )<<endl; #include<iost
19、ream.h>class Rectangle public:double point1,point2,point3,point4;friend double girth(Rectangle &rec);friend double area(Rectangle &rec);double girth();double area();Rectangle。cout<<"输入矩形的左下与右上角的坐标:"<<endl;cin>>point1>>point2>>point3>>point4;;d
20、ouble Rectangle:girth() 周长double Rectangle:area()return 2*(point3-point1+point4-point2);double girth(Rectangle &rec)double area(Rectangle &rec)void main ()return (point3-point1)*(point4-point2);return 2*(rec.point3-rec.point1+rec.point4-rec.point2);return (rec.point3-rec.point1)*(rec.point4-
21、rec.point2);Rectangle rectangle;cout<<"成员函数 n"<<"矩形周长:"<<rectangle.girth()<<"n 矩形面积:"<<rectangle.area()<<endl;cout<<"普通函数 n"<<"矩形周长:"<<girth(rectangle)<<"n 矩形面积:"<<area(recta
22、ngle)<<endl;I C" I- UV IH |J U JulH 1-iJ pu XBH USI D:.叩T模值吐 DeDUQ dj.exe'左下与右上角的坐才i数工函周面函nr-z/%,z4.5 定义一个圆类(Circle ),属性为半径(radius)、圆周长和面积,操作为输入半径并计0,算周长、面积,输出半径、周长和面积。要求定义构造函数(以半径为参数,缺省值为周长和面积在构造函数中生成)和拷贝构造函数。#include<iostream.h>class Circledouble radius, girth,area;public:Circ
23、le(double r=0) cout<<"构造"<<endl;radius=r;girth=2*3.14*radius;area=radius*radius*3.14;Circle(const Circle &circle) cout<<"拷贝"<<endl;radius=circle.radius;girth=circle.girth;area=circle.area;void display。cout<<"半径:"<<radius<<en
24、dl<<"周长:"<<girth<<endl<<"面积:"<<area<<endl;void main ()Circle cir1(1);Circle cir2(cir1);cir1.display();cir2.display();”D:PPT板 2 1 2 1 w » 16 3 16 3 造贝隹菽 智拷半用画半周面4.6 设计一个学校在册人员类(Person)。数据成员包括:身份证号(IdPerson),姓名(Name),性别(Sex),生日(Birthday)和家庭住
25、址(HomeAddress )。成员函数包括人员信息的录入 和显示。还包括构造函数与拷贝构造函数。设计一个合适的初始值。#include<iostream.h>#include<string.h>class Personchar name20;char id19;char sex;struct Birthday int year;int month;int date;birthday;char home50;public:Person()cout<<"执行构造函数n"<<"输入姓名:";cin>>
26、;name;cout<<"输入身份证:";cin>>id;cout<<"输入T别:”;cin>>sex;cout<<"生日:";cin>>birthday.year>>birthday.month>>birthday.date;cout<<"家庭地址:"cin>>home;cout<<endl;Person(const Person &p)cout<<"执行复制函数
27、"<<endl;strcpy(name,);strcpy(id,p.id);sex=p.sex;birthday.year=p.birthday.year;birthday.month=p.birthday.month;birthday.date=p.birthday.date;strcpy(home,p.home);void display。cout<<"姓名:"<<name<<"n 身份证号:"<<id<<"n 性别:"<<sex<<"n 生日:”<<birthday.year<<"-"<<birthday.month<<"-"<<birthday.date<<endl<<"家庭地址:&qu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版废油运输与废弃物回收利用技术创新合同3篇
- 2024版游戏代运营服务合同范本3篇
- 2024年度车辆抵押反担保车辆托管服务合同3篇
- 2024年度文化旅游地产转让合同补充协议3篇
- 2024版房地产项目合同保密协议及前期工作协议3篇
- 2024年度艺术展览摄影摄像服务合同3篇
- 2024版住房和城乡建设局智慧城市建设合同标的2篇
- 2024年度建设施工合同:新建办公楼施工建设合同2篇
- 2024版抖音明星代言拍摄合同模板3篇
- 2024版抵押房屋买卖法律咨询及委托合同3篇
- GB/T 13098-2006工业用环氧乙烷
- GB/T 12970.2-2009电工软铜绞线第2部分:软铜绞线
- 《扁鹊治病》教学课件
- 围手术期多模式镇痛管理及无痛病房
- 2022年山东科技大学计算机科学与技术专业《操作系统》科目期末试卷A(有答案)
- 第六课 掌握演绎推理方法课件 【备课精讲精研】 高中政治统编版选择性必修三逻辑与思维
- 实习企业鉴定考核表
- 精编新东方考研英语词汇词根+联想记忆法乱序版-绿皮书俞敏洪编着带中文翻译真正完全版资料
- 综合管廊工程施工技术概述课件
- 家教最新收费退费处理办法
- 《我的心儿怦怦跳》优秀课件
评论
0/150
提交评论