第二章 类与对象.ppt
《第二章 类与对象.ppt》由会员分享,可在线阅读,更多相关《第二章 类与对象.ppt(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章第二章 类与对象类与对象2.1.1 类的定义类的定义类(类(Class)具有相同或相近的性质和行为的事物集合。具有相同或相近的性质和行为的事物集合。是面向对象思想中的一个重要组成部分。是面向对象思想中的一个重要组成部分。如何在计算机中将如何在计算机中将“类类”表达出来?表达出来?在在C语言中,当定义结构体(语言中,当定义结构体(struct):):struct SAMPLE int member1,member2;var1;使用结构中的成员:使用结构中的成员:int var=var1.member1*var1.member2;22.1.1 类的定义类的定义32.1.1 类的定义类的定义语
2、法语法class /声明(定义)数据成员声明(定义)数据成员 /声明成员函数声明成员函数;说明说明类的定义以关键字类的定义以关键字class开始开始,其后是其后是类名。类名。“”表示类数据成员和成员函数的声明表示类数据成员和成员函数的声明最终以分号结束最终以分号结束。42.1.1 类的定义类的定义class CCompanyStaff /声明(定义)成员变量声明(定义)成员变量 public:int m_iStaffNum;/工作编号工作编号 char m_cName20;/姓名姓名 float m_fRateOfAttend;/出勤率出勤率 float m_fBasicSal;/基本工资基本
3、工资 /声明成员函数声明成员函数 void SetBasicSal(float sal);/设置基本工资设置基本工资;52.1.2 成员函数的实现成员函数的实现 成员函数成员函数成员函数决定对象的操作行为。成员函数决定对象的操作行为。它是程序算法的它是程序算法的实现部分实现部分。它也是对封装的数据进行操作的唯一途径。它也是对封装的数据进行操作的唯一途径。它有两种方式它有两种方式类定义外实现类定义外实现类定义内实现类定义内实现62.1.2 成员函数的实现成员函数的实现类定义外实现成员函数类定义外实现成员函数类内声明类内声明格式格式返回值类型返回值类型 成员函数名成员函数名(形式参数表)(形式参数
4、表);类外实现类外实现返回值类型返回值类型 类名类名:成员函数名成员函数名(形式参数表)(形式参数表)函数体函数体 例例2.2 企业员工类的实现企业员工类的实现sclass2_2_companyStaff1.cpp 72.1.2 成员函数的实现成员函数的实现类定义内实现类定义内实现在类内声明和实现成员函数在类内声明和实现成员函数语法语法返回值类型返回值类型 成员函数名成员函数名(形式参数表)(形式参数表)函数体函数体sclass2_2_0_companyStaff.h 82.1.2 成员函数的实现成员函数的实现#include using namespace std class CCompan
5、yStaff /声明(定义)成员变量声明(定义)成员变量 public:int m_iStaffNum;/工作编号工作编号 char m_cName20;/姓名姓名 float m_fRateOfAttend;/出勤率出勤率 float m_fBasicSal;/基本工资基本工资 /声明成员函数声明成员函数 void SetBasicSal(float sal);/设置基本工资设置基本工资;void CCompanyStaff:SetBasicSal(float sal)m_fBasicSal=sal;void main()CCompanyStaff staff;staff.SetBasicS
6、al(100);cout“staff.m_fBasicSal=”staff.m_fBasicSal endl;92.1.2 成员函数的实现成员函数的实现对于对于C+语言的编程习惯:语言的编程习惯:将类的定义存放于将类的定义存放于“*.h”的头文件中,每个类的头文件中,每个类一个声明文件。一个声明文件。将类的成员函数实现定义存放于将类的成员函数实现定义存放于“*.cpp”文件文件中,与相应的声明文件一一对应中,与相应的声明文件一一对应例:例:smain2-4.cppsmain2-4.h102.1.2 成员函数的实现成员函数的实现实例:实例:编写程序:完成学生信息的输入、输出操作,编写程序:完成学
7、生信息的输入、输出操作,学生信息包括:学号,姓名。学生信息包括:学号,姓名。student.cpp112.1.3 类成员的访问权限类成员的访问权限封装性封装性直观理解,类将属于它的数据(数据成员)和直观理解,类将属于它的数据(数据成员)和针对数据的操作(成员函数)包裹在一起就是针对数据的操作(成员函数)包裹在一起就是一种封装。一种封装。通过设置数据成员和成员函数的通过设置数据成员和成员函数的访问权限访问权限,限,限定类成员能否在定类成员能否在类外类外访问。访问。目的:保护类(对象)的实现。目的:保护类(对象)的实现。封装成类的好处封装成类的好处可以实现可以实现数据隐藏数据隐藏。122.1.3
8、类成员的访问权限类成员的访问权限类内、类外类内、类外类内:类的定义和成员函数实现体内类内:类的定义和成员函数实现体内类外:除类内以外的范围类外:除类内以外的范围访问权限关键字访问权限关键字public(公有的):(公有的):公开的,可见的公开的,可见的。类成员。类成员(数据成员与成员函数)可以在类内、外使用。(数据成员与成员函数)可以在类内、外使用。private (私有的):(私有的):不可见的不可见的。成员只能在类。成员只能在类内使用。内使用。protected (保护的):受到保护的。成员也只(保护的):受到保护的。成员也只能在类内或其派生类内使用。(以后再讨论)能在类内或其派生类内使用
9、。(以后再讨论)132.1.3 类成员的访问权限类成员的访问权限说明说明C+类中的成员(数据成员、成员函数)都应该指明访类中的成员(数据成员、成员函数)都应该指明访问权限。问权限。C+类定义中的类定义中的缺省属性为私有缺省属性为私有的(的(private)。)。类成员可在类内直接访问,类成员可在类内直接访问,类的成员函数内类的成员函数内可以访问类可以访问类的所有成员,没有任何限制的所有成员,没有任何限制访问权限只限定在类外访问类成员的权限访问权限只限定在类外访问类成员的权限每个权限关键字的作用范围:从一个关键字开始,直到每个权限关键字的作用范围:从一个关键字开始,直到另外一个关键字结束(或类结
10、束了)另外一个关键字结束(或类结束了)封装所实现的数据隐藏是封装所实现的数据隐藏是面向对象程序设计的一个面向对象程序设计的一个关键关键特性特性隐藏一个类的数据从而使其他类无法访问。隐藏一个类的数据从而使其他类无法访问。142.1.3 类成员的访问权限类成员的访问权限#include using namespace std class CCompanyStaff private:int m_iStaffNum;/工作编号工作编号 char m_cName20;/姓名姓名 float m_fRateOfAttend;/出勤率出勤率 float m_fBasicSal;/基本工资基本工资 publi
11、c:void SetBasicSal(float sal);/设置基本工资设置基本工资;void CCompanyStaff:SetBasicSal(float sal)m_fBasicSal=sal;void main()CCompanyStaff staff;staff.m_iStaffNum=100;/staff.SetBasicSal(600);/cout“staff.m_fBasicSal=”staff.m_fBasicSal endl;152.1.3 类成员的访问权限类成员的访问权限说明说明CCompanyStaff staff;staff.SetBasicSal(600);/合法
12、的,因为合法的,因为SetBasicSal是一个公开是一个公开(public)的方法。)的方法。staff.m_iStaffNum=100;/非法的,因为非法的,因为m_iStaffNum是一个私是一个私有(有(private)的变量)的变量。void CCompanyStaff:SetBasicSal(float sal)m_fBasicSal=sal;/SetBasicSal是对象的成员,所以它的定义是对象的成员,所以它的定义中可以访问中可以访问m_fBasicSal私有变量私有变量。162.1.3 类成员的访问权限类成员的访问权限访问权限举例:访问权限举例:sclass2_1_demo.
13、cpp 建议建议定义访问权限时的顺序,涉及一个编程习惯:定义访问权限时的顺序,涉及一个编程习惯:“以数据为中心以数据为中心”“以行为为中心以行为为中心”最好把一个类的数据成员都声明为私有的访问权限。最好把一个类的数据成员都声明为私有的访问权限。一是一是信息隐藏信息隐藏,即实现封装,把类的内部实现和外,即实现封装,把类的内部实现和外部表现分开,让使用者无需了解类的实现细节;部表现分开,让使用者无需了解类的实现细节;二是二是数据保护数据保护,将类的重要信息保护起来,以免被,将类的重要信息保护起来,以免被其他程序不恰当地修改。其他程序不恰当地修改。17课堂练习课堂练习请问以下程序中哪些语句有问题:请
14、问以下程序中哪些语句有问题:class2_2_1_companyStaff.cpp182.2.1 类对象类对象 对象(对象(object):类的实例,即类的性质(变量)具体化之后成类的实例,即类的性质(变量)具体化之后成为为 对象。对象。类与对象的联系类与对象的联系一个对象是类的一种特殊情况。一个对象是类的一种特殊情况。一个类可以实例化很多的对象,一个类可以实例化很多的对象,一个对象属于一个类。一个对象属于一个类。它们是一对多的关系。它们是一对多的关系。192.2.2 对象成员的访问对象成员的访问 普通对象普通对象声明声明 ;访问访问./访问公有数据成员访问公有数据成员.()/访问公有成员函数
15、访问公有成员函数 例例CCompanyStaff staff1;staff1.staff.m_iStafNum=12345;staff1.SetBasicSal(4000.0);202.2.3 对象成员的访问对象成员的访问例例2.8 在员工管理系统中,建立两个对象分别在员工管理系统中,建立两个对象分别用两种方式去访问类成员。用两种方式去访问类成员。sclass2_8_companyStaff.h smain2_8.cpp 212.2.3 对象成员的访问对象成员的访问对象数组对象数组声明声明 int;访问访问下标下标./访问公有数据成员访问公有数据成员下标下标.()/访问公有成员函数访问公有成员
16、函数例例CCompanyStaff astaff 5;astaff1.iStafNum=12345;astaff1.SetBasicSal(4000.0);222.2.3 对象成员的访问对象成员的访问 例例2.9对象数组应用举例对象数组应用举例sclass2_13_fruit.h smain2_13.cpp CFruit d4;/创建一个对象数组创建一个对象数组232.2.3 对象成员的访问对象成员的访问对象指针对象指针声明声明 *;访问访问-/访问公有数据成员访问公有数据成员-()/访问公访问公有成员函数有成员函数例例CCompanyStaff *pstaff;pstaff=new CCom
17、panyStaff(LiuMei,0.95,3000.0);pstaff-GetName()242.2.3 对象成员的访问对象成员的访问例例2.10 对象指针举例。对象指针举例。sclass2_9_objPointer.h smain2_9.cpp CPointerExam*pointer;/声明声明pointer=&obj;/初始化初始化pointer-SetNum(2);对象指针在使用之前一定要初始化,为其动态对象指针在使用之前一定要初始化,为其动态分配存储空间;分配存储空间;使用完毕必须释放该对象指针所使用完毕必须释放该对象指针所代表的代表的资源。资源。252.2.4 构造函数构造函数对
18、象存储空间对象存储空间需要向操作系统需要向操作系统申请一定的内存空间申请一定的内存空间用于存放用于存放新建的对象。新建的对象。对象分配存储空间对象分配存储空间和两种方式。和两种方式。静态分配静态分配可以将对象或静态成员存放在栈中或静态存储区可以将对象或静态成员存放在栈中或静态存储区域中。域中。动态分配动态分配动态内存分配是指在堆(也称自由内存)中分配动态内存分配是指在堆(也称自由内存)中分配存储单元,即为对象动态从堆中分配内存。存储单元,即为对象动态从堆中分配内存。使用操作符使用操作符new分配内存空间;分配内存空间;使用操作符使用操作符delete释放内存空间。释放内存空间。262.2.4
19、构造函数构造函数对象初始化对象初始化定义了一个特殊的方法(函数),定义了一个特殊的方法(函数),专门用于对专门用于对象生成时的初始化。象生成时的初始化。构造函数(构造函数(constructor)对象撤销对象撤销定义了一个特殊的方法(函数),定义了一个特殊的方法(函数),专门用于对专门用于对象消亡时的撤销操作。象消亡时的撤销操作。析构函数(析构函数(destructor)272.2.4 构造函数构造函数构造函数构造函数C+规定,每个类必须有一个构造函数,没有构造函数,规定,每个类必须有一个构造函数,没有构造函数,就不能创建任何对象就不能创建任何对象C+通过类设置一个专门的通过类设置一个专门的成
20、员函数成员函数来负责类中来负责类中对象的初始化。对象的初始化。作用作用在对象被创建时利用特定的值构造对象,将对象初始化到一个在对象被创建时利用特定的值构造对象,将对象初始化到一个特定的状态。特定的状态。特性特性函数名与类名称相同,没有返回值。它在对象生成之时函数名与类名称相同,没有返回值。它在对象生成之时自动执自动执行行。格式格式public:类名(类名();282.2.4 构造函数构造函数构造函数可以由程序设计人员自己编写。也可以由系统构造函数可以由程序设计人员自己编写。也可以由系统提供(没有编写构造函数)。提供(没有编写构造函数)。初始化机制初始化机制根据对象后的参数与构造函数的参数一致性
21、,自动调用根据对象后的参数与构造函数的参数一致性,自动调用相应的构造函数。相应的构造函数。如果对象后没有参数,则调用系统缺省构造函数(只有如果对象后没有参数,则调用系统缺省构造函数(只有在没有定义构造函数的情况下),否则调用自己定义的在没有定义构造函数的情况下),否则调用自己定义的不带参数构造函数。不带参数构造函数。声明对象数组时,后面不能接参数。即系统自动调用且声明对象数组时,后面不能接参数。即系统自动调用且必须调用已定义的不带参数的构造函数或系统默认构造必须调用已定义的不带参数的构造函数或系统默认构造函数。函数。声明对象指针不自动调用构造函数。声明对象指针不自动调用构造函数。例:例:scl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二章 类与对象 第二 对象
限制150内