版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章类和对象主讲人:6.1面向对象程序设计 6.2对象6.3构造函数和析构函数 6.4静态成员 6.5常成员 6.6this指针 6.7友元 6.8对象数组和对象成员 6.9案例实践 6.1面向对象程序设计6.1.1面向对象概述面向对象具有三个基本特征:封装。继承。多态性。6.1.2类的定义声明一个类的一般形式为:class<类名>{private: <成员表>;public: <成员表>;protected: <成员表>; ……};6.1.3类的数据成员例如要描述一个桌子类desk,它具有长、宽、高的属性,代码如下://声明desk类classdesk{ intlength;//描述桌子的长 intwidth;//描述桌子的宽 intheight;//描述桌子的高};6.1.4类的成员函数在类的声明中仅给出了成员函数的原型,函数的定义还需在其他地方给出。类的成员函数的一般形式为:<数据类型><类名>::<函数名>(<参数表>){<函数体>}6.2对象6.2.1对象的定义定义一个对象的语法和定义一个基本数据类型的变量非常相似。需要指定对象的类型以及对象名,语法为:类名对象名;6.2.2对象成员的访问对象名.数据成员对象名.成员函数(实参列表)或者:(*对象指针).数据成员(*对象指针).成员函数(实参列表)或者:对象指针->数据成员对象指针->成员函数(实参列表)【例6.2】设计一个字符串类String,将字符串s逆序。具体要求如下:1.私有数据成员:chars[100];2.共有成员函数:voidsets(char*t);//初始化svoidfun();//功能函数:将s逆序voidshow();//功能函数:输出数据成员3.用数据"hello123"进行测试。【例6.3】定义Date类,类中声明年、月、日三个成员变量。通过程序查看Date类型对象占用的内存大小。6.3构造函数和析构函数6.3.1构造函数构造函数(Constructor)是类的一个特殊的成员函数,它具有如下特点。(1)构造函数的名称和类名一致。(2) 构造函数无任何返回值类型。(3) 构造函数的访问权限一般为public。(4) 一个类可以有多个构造函数(构造函数可以重载)(5) 构造函数的函数体可以在类内实现,也可以在类外实现。(6) 定义对象数组时只会调用缺省的构造函数。(7) 定义对象指针时不会调用构造函数。调用拷贝构造函数的情况有以下三种?1)用一个对象去初始化一个新对象时。2)当一个函数的返回值类型是类类型时。3)当一个函数的参数是类对象进行值传递时。6.3.2析构函数1.为何需要析构函数如果某个对象在创建后的使用过程中,申请了一些资源(如内存或打开的文件),并且没有释放这些资源,则应该在对象释放前归还这些资源。我们可以定义一个成员函数,在对象即将释放前调用。【例6.11】定义一个String类来描述字符串,该类具有初始化、替换某个字符、返回某个字符、输出等成员函数。析构函数(Destructor)也是类的一个特殊的成员函数,它有如下特点:(1)析构函数的名称和类名一致,前面加~。(2)析构函数无任何返回值类型。(3)析构函数的访问权限一般为public。(4)一个类只能有一个析构函数,即析构函数不能重载(因为函数名是固定的,参数也是固定的)。(5)析构函数由系统自动调用,程序中一般不调用析构函数。3.缺省析构函数在定义类时,若没有定义类的析构函数,则编译器自动产生一个缺省的析构函数,其语法格式为ClassName::~ClassName(){}6.4静态成员6.4.1静态数据成员在类声明时,可以利用static关键字将某个数据成员声明成static数据成员(静态数据成员),对于静态数据成员,可以按照普通数据成员的方式访问,即:对象名.静态数据成员对象指针->静态数据成员也可以通过类名作为前缀的方式来访问:类名::静态数据成员关于静态数据成员有以下几点注意:(1)静态数据成员必须在类体内作引用性说明,同时在类体外对其作定义性说明。定义性说明时对其初始化。若不指定初始值,则缺省初始值为0。(2)不能在类的构造函数中对静态数据成员进行初始化。(3)静态数据成员的引用:一种方式可用:类名::静态成员名。另因为类的静态成员所分配的存储空间被所有对象共享,类的公有静态成员可以被所有对象直接引用和操作,另一种方式可用:对象.静态成员名。6.4.2静态成员函数在类声明时,也可以利用static关键字将某个成员函数声明成static成员函数(静态成员函数)。在静态成员函数中只能访问静态成员,不能访问非静态的数据成员和成员函数。6.5常成员对象数据成员的值反映了该对象的状态,一般来说,一个对象在程序运行过程中,其状态可能是不断变化的,即其数据成员的值是不断变化的。对象的有些数据成员在对象的整个生命周期保持不变,这样的数据成员在类声明时,可以将其声明为常量数据成员,通常称为const数据成员。常数据成员必须进行初始化,并且其值不能被修改,常数据成员只能通过构造函数的成员初始化列表进行初始化。格式如下:类名::类名(形参列表):常数据成员1(值1),常数据成员2(值2),……{//构造函数的函数体}6.2.2常成员函数const成员函数的原型为返回值类型函数名(形参列表)const;例如:classA{public: voidfun()const //const成员函数
{ } ...};使用常成员函数时要注意:(1)const是函数类型的一个组成部分,在函数实现部分也要有const关键字。(2)常成员函数不能更新对象的数据成员,也不能调用该类中没用const修饰的成员函数。(3)常对象只能调用类的常成员函数,一般对象可以调用常成员函数,该对象调用常成员函数时,该数据成员不会被更新。6.5.3常对象与普通变量一样,可使用关键字const修饰对象。C++语言规定,对于const对象,只能访问其中也用const修饰的成员函数,即const成员函数。C++语言规定,在const成员函数中不得修改类中的任何数据成员的值。6.6this指针每一个成员函数(static成员函数是个例外)都有一个隐藏的指针类型的形参this,其类型为类名*constthis;成员函数中对对象的成员的访问是通过this指针来进行的。当调用对象的成员函数时,编译器会把相应对象的地址作为隐含参数传给成员函数隐藏的形参this。6.7友元为了强调类的数据封装性,在C++语言中使用private和protected来控制数据成员的访问,通过public成员函数来访问private成员,以达到对外部隐藏其成员的目的。如果将成员的访问特征都设为公有的,则又破坏了类的封装性。6.7.1友元函数1.全局函数作为友元函数可以将一个全局函数声明为一个类的友元函数,这样在全局函数中就可以访问到类对象的所有成员。友元的声明,不受访问权限修饰符的影响,即随便放在哪种访问权限修饰符影响范围内效果都一样。2.类的成员函数作为友元函数可以将类的成员函数声明成一个类的友元函数。6.7.2友元类不仅可以将一个类的成员函数声明成某个类的友元,也可以将一个类B声明成另一个类A的友元,此时称类B为类A的友元类。若类B为类A的友元类,则类B的所有成员函数都自动为类A的友元函数。语法格式为:friendclass类名;关于友元,我们需要注意:(1)友元的关系是单向的而不是双向的,如果类A是类B的友元类,并不等于类B也是类A的友元。(2)友元关系不具有传递性,如果类A是类B的友元,类B是类C的友元,则不等于类A是类C的友元。6.8对象数组和对象成员6.8.1对象数组对象数组是指以数组元素为对象的数组,该数组中所有元素必须是同一个类的对象。对象数组的定义格式为<类名><数组名>[<大小>]...;6.8.2对象成员当一个类的对象是另一个类的成员时,我们就称该对象为成员对象。当类中出现了成员对象时,该类的构造函数要包含对成员对象的初始化。对成员对象的初始化,缺省使用无参构造函数进行。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年企业社会责任传播策略课
- 2026年人才梯队系统建设方案课程
- 2026甘肃倚核人力资源有限公司招聘备考题库及答案详解(易错题)
- 中药材仓储设施设备运维手册
- 2026重庆万州区长滩镇非全日制公益性岗位工作人员招聘1人备考题库及一套完整答案详解
- 基础化工行业专题:东升西落全球化工竞争格局的重塑
- 宏观经济专题:美联储主席换届交易指南
- 职业噪声工人心血管健康监测技术规范
- 职业压力管理的医疗化服务框架
- 职业健康远程随访的数字化健康干预方案
- 2025年大学生物(细胞结构与功能)试题及答案
- 2026年张家界航空工业职业技术学院高职单招职业适应性测试参考题库含答案解析
- 氮气安全技术说明书
- 绘本讲师培训课件
- 广东生地会考试题及答案
- 2025年品质经理年度工作总结及2026年度工作计划
- 2025中国胸痛中心诊疗指南
- ADC药物首次人体试验剂量递推
- 医药行业2026年度医疗器械策略报告耗材IVD篇:创新引领国际布局后集采时代医疗器械的价值重构
- 2024集中式光伏电站场区典型设计手册
- 酒店餐饮食品安全管理手册
评论
0/150
提交评论