《c++程序设计》课件第3章 类和对象.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《c++程序设计》课件第3章 类和对象.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+程序设计 c+程序设计课件第3章 类和对象 c+ 程序设计 课件 对象
- 资源描述:
-
1、C+程序设计第第3 3章章 类和对象类和对象第第3章章 类和对象类和对象本章学习要点本章学习要点类和对象的概念及其关系类的声明和对象的定义及使用构造函数与析构函数的作用及使用对象数组 对象与指针 对象与const对象的动态创建和释放对象的赋值和复制向函数传递对象学生信息管理系统中类的声明和对象的定义第第3章章 类和对象类和对象本章学习目标本章学习目标正确理解类、对象及封装的概念熟练掌握类的声明和对象的定义及使用理解构造函数与析构函数的作用及使用掌握对象与指针及const的特点及使用理解并掌握对象的赋值和复制理解对象作为函数的参数传递的实质掌握基本的基于对象的程序设计与实现3.1 类的声明和对象
2、的定义类的声明和对象的定义v本节主要是关于类和对象的概念、类的声本节主要是关于类和对象的概念、类的声明格式、对象的定义方法明格式、对象的定义方法 3.1.1 类和对象的概念及关系类和对象的概念及关系v对象对象 封装了数据及在这些数据之上的操作的封装了数据及在这些数据之上的操作的封装体封装体 v类类 对具有相同属性和操作的一组对象的抽对具有相同属性和操作的一组对象的抽象描述象描述 v类和对象的关系类和对象的关系 类是对象的抽象;对象是对类的实例化类是对象的抽象;对象是对类的实例化类和对象的关系类和对象的关系3.1.1 类和对象的概念及关系类和对象的概念及关系3.1.2 类类的声明的声明class
3、 类名类名public:公用成员公用成员 protected:受保护成员受保护成员 private:私有成员私有成员 ;声明类的一般形式:声明类的一般形式:声明类的关键字声明类的关键字合法标识符合法标识符公用成员限定符公用成员限定符受保护成员限定符受保护成员限定符私有成员限定符私有成员限定符类结束要加分号类结束要加分号3.1.2 类类的声明的声明【例例3-1】声明一个学生类,要求包括学生的学号、声明一个学生类,要求包括学生的学号、姓名、性别等信息,并且能够显示学生的信息。姓名、性别等信息,并且能够显示学生的信息。3.1.2 类类的声明的声明class Student /声明声明Student类
4、类public:/以下部分为公用成员函数以下部分为公用成员函数 void Show()coutNo.:stuNoendl;coutName:stuNameendl;coutSex:stuSexendl;private:/以下部分是私有数据成员以下部分是私有数据成员 int stuNo;char stuName20;char stuSex;/类声明结束,此处必须有分号类声明结束,此处必须有分号3.1.2 类类的声明的声明3.1.3 对象的定义对象的定义v声明类之后,再定义对象声明类之后,再定义对象 如:如:Student zhang,wang;或:或:class Student zhang,wa
5、ng;v在声明类的同时定义对象在声明类的同时定义对象 如:如:class Student zhang,wang;v不出现类名,直接定义对象不出现类名,直接定义对象 如:如:class zhang,wang;声明类时系统并不分配内存单元,而定义对象声明类时系统并不分配内存单元,而定义对象时系统会给每个对象分配内存单元时系统会给每个对象分配内存单元3.2.1 成员函数的性质成员函数的性质v不属于任何类的函数称为不属于任何类的函数称为普通函数普通函数。v成员函数隶属于某个类成员函数隶属于某个类v成员函数与普通函数的区别成员函数与普通函数的区别 成员函数是属于某个类的成员函数是属于某个类的,是类的一个
6、成员是类的一个成员 成员函数可以指定访问属性成员函数可以指定访问属性 成员函数可以访问本类的任何成员,而普通函成员函数可以访问本类的任何成员,而普通函数只能访问对象的公用成员数只能访问对象的公用成员v对于成员函数,对于成员函数,一般是将需要被类外调用一般是将需要被类外调用的声明为公用的,不需要被类外调用的声的声明为公用的,不需要被类外调用的声明为私有的。明为私有的。【例例3-4】将将Student类的成员函数改为在类外定义类的成员函数改为在类外定义的形式。的形式。3.2.2 在类外定义成员函数在类外定义成员函数class Student/声明声明Student类类型类类型public:/以下部
7、分为公用成员函数以下部分为公用成员函数 void Show();private:/以下部分是私有数据成员以下部分是私有数据成员 int stuNo;char stuName20;char stuSex;/类声明结束类声明结束/在类的声明之外定义成员函数在类的声明之外定义成员函数 void Student:Show()coutNo.:stuNoendl;coutName:stuNameendl;coutSex:stuSexendl;3.2.2 在类外定义成员函数在类外定义成员函数3.2.3 inline成员函数成员函数vinline函数函数 在编译时将被调用函数的代码直接嵌入在编译时将被调用函数
8、的代码直接嵌入到调用函数处到调用函数处 vinline成员函数就是将类中的成员函数成员函数就是将类中的成员函数声明为内置的声明为内置的 当类中的成员函数是在类内定义时,默当类中的成员函数是在类内定义时,默认该成员函数是认该成员函数是inline成员函数成员函数 如果成员函数定义在类的外部,则在成如果成员函数定义在类的外部,则在成员函数声明或定义前必须要有员函数声明或定义前必须要有inline关键关键字字 3.2.4 成员函数的存储方式成员函数的存储方式v实例化对象时需要分配内存空间,数据和函实例化对象时需要分配内存空间,数据和函数都需要存储空间数都需要存储空间v同一个类的不同对象的数据是不一样
9、的,因同一个类的不同对象的数据是不一样的,因此要为每个对象的数据成员分配内存单元此要为每个对象的数据成员分配内存单元v同一个类的不同对象的函数是一样的,因此同一个类的不同对象的函数是一样的,因此将同类的所有对象的函数放在一个公共的区将同类的所有对象的函数放在一个公共的区域。域。3.2.4 成员函数的存储方式成员函数的存储方式【例例3-5】类的对象占用内存空间实验。类的对象占用内存空间实验。#include using namespace std;class Testpublic:void Show()coutchar in Test is:cendl;private:char c;int ma
10、in()Test test;coutSize of Test is sizeof(test)endl;return 0;3.2.4 成员函数的存储方式成员函数的存储方式【例【例3-6】相同类的不同对象执行相同成员函数输出相同类的不同对象执行相同成员函数输出不同结果。不同结果。#include using namespace std;class Testpublic:void Set(char ch)c=ch;void Show()coutchar in Test is:cc=ch;void Show(Test*this)coutchar in Test is:c”运算符方便直观的进行,运算符方
11、便直观的进行,“-”称为指向运算符。称为指向运算符。例如:例如:Test test1;test1.Set(a);Test*pTest=&test1;test1.Show();pTest-Show();此处两个语句的执行结此处两个语句的执行结果完全相同,只是采用果完全相同,只是采用了不同的访问对象成员了不同的访问对象成员的形式而已的形式而已。3.3.3 通过引用访问成员通过引用访问成员v对象的引用和普通变量的引用在本质上是一样对象的引用和普通变量的引用在本质上是一样的的 v通过对象的引用访问对象成员和通过对象访问通过对象的引用访问对象成员和通过对象访问成员形式上是一样的成员形式上是一样的例如:例
12、如:Test test1;test1.Set(a);Test&refTest=test1;test1.Show();refTest.Show();此处两个语句的执行此处两个语句的执行结果完全相同,只是结果完全相同,只是采用了不同的访问对采用了不同的访问对象成员的形式而已象成员的形式而已。class Student/声明声明Student类类型类类型public:/以下部分为公用成员函数以下部分为公用成员函数 void Show();private:/以下部分是私有数据成员以下部分是私有数据成员 int stuNo;char stuName20;char stuSex;/类声明结束类声明结束/在
13、类的声明之外定义成员函数在类的声明之外定义成员函数 void Student:Show()coutNo.:stuNoendl;coutName:stuNameendl;coutSex:stuSexendl;int main()Student stud;stud.Show();return 0;class Student/声明声明Student类类型类类型public:/以下部分为公用成员函数以下部分为公用成员函数 void SetValue();void Show();private:/以下部分是私有数据成员以下部分是私有数据成员 int stuNo;char stuName20;char s
14、tuSex;/类声明结束类声明结束/在类的声明之外定义成员函数在类的声明之外定义成员函数 void Student:Show()coutNo.:stuNoendl;coutName:stuNameendl;coutSex:stuSexendl;void Student:SetValue()cout“Please input No,Name,Sex:“stuNostuNamestuSex;int main()Student stud;stud.SetValue();stud.Show();return 0;3.4.1 构造函数构造函数v构造函数的作用构造函数的作用 创建对象时对对象的数据成员初始
15、化创建对象时对对象的数据成员初始化 v构造函数的特点构造函数的特点 构造函数是类的一个特殊的成员函数,构造函数构造函数是类的一个特殊的成员函数,构造函数名与类名相同,且没有返回值名与类名相同,且没有返回值 构造函数不需要用户调用,由系统在创建对象时构造函数不需要用户调用,由系统在创建对象时自动调用的自动调用的 构造函数内容一般是初始化数据语句,但也可以构造函数内容一般是初始化数据语句,但也可以是其他的语句是其他的语句 创建对象时肯定会执行一个构造函数创建对象时肯定会执行一个构造函数class Student/声明声明Student类类型类类型public:/以下部分为公用成员函数以下部分为公用
16、成员函数 Student()stuNo=0;strcpy(stuName,);stuSex=M;void SetValue();void Show();private:/以下部分是私有数据成员以下部分是私有数据成员 int stuNo;char stuName20;char stuSex;/类声明结束类声明结束3.4.1 构造函数构造函数v带参数的构造函数带参数的构造函数 一般格式为:一般格式为:构造函数名构造函数名(参数表参数表);实参是在定义对象时给出的,一般格式实参是在定义对象时给出的,一般格式为:为:类名类名 对象名对象名(实参表实参表);v带参数的构造函数形式可以方便的实带参数的构造
17、函数形式可以方便的实现对不同对象进行不同的初始化现对不同对象进行不同的初始化【例【例3-10】定义两个长方体,分别求出它们的体积。定义两个长方体,分别求出它们的体积。这两个长方体的长宽高分别是这两个长方体的长宽高分别是4,2,3和和5,1,2。3.4.1 构造函数构造函数class Student/声明声明Student类类型类类型public:/以下部分为公用成员函数以下部分为公用成员函数 Student()stuNo=0;strcpy(stuName,);stuSex=M;void SetValue();void Show();private:/以下部分是私有数据成员以下部分是私有数据成员
18、 int stuNo;char stuName20;char stuSex;/类声明结束类声明结束#include using namespace std;class Boxpublic:Box(float L,float w,float h)/带有参数的构造函数 length=L;width=w;height=h;float Volume()return length*width*height;private:float length,width,height;int main()Box box1(4,2,3);/创建对象时给出实参 Box box2(5,1,2);coutVolume of
19、 box1 is box1.Volume()endl;coutVolume of box2 is box2.Volume()endl;return 0;3.4.1 构造函数构造函数v构造函数与参数初始化表构造函数与参数初始化表 这种方法不在构造函数的函数体内对数据成员这种方法不在构造函数的函数体内对数据成员初始化,而是在函数的首部实现初始化,而是在函数的首部实现。例如:例如:class Boxpublic:Box(float L,float w,float h):length(L),width(w),height(h)float Volume()return length*width*heig
20、ht;private:float length,width,height;使用参数初始化表的构造函数3.4.1 构造函数构造函数v 构造函数重载构造函数重载 在类中定义多个构造函数,这些构造函在类中定义多个构造函数,这些构造函数具有相同的函数名而参数表中参数的数具有相同的函数名而参数表中参数的个数或类型不同个数或类型不同 相当于给类实例化对象时提供了不同的相当于给类实例化对象时提供了不同的初始化方法初始化方法 3.4.1构造函数构造函数【例例3-12】构造函数重载。构造函数重载。#include using namespace std;class Boxpublic:Box()/无参数的构造函
21、数 length=1;width=1;height=1;Box(float L,float w,float h)/带有参数的构造函数 length=L;width=w;height=h;float Volume()return length*width*height;private:float length,width,height;int main()Box box1(4,2,3);Box box2;coutVolume of box1 is box1.Volume()endl;coutVolume of box2 is box2.Volume()endl;return 0;3.4.1构造函
22、数构造函数3.4.2 析构函数析构函数v析构函数的作用析构函数的作用 在系统释放对象之前进行清理工作。在系统释放对象之前进行清理工作。v析构函数的特点析构函数的特点 析构函数的函数名是固定的,由析构函数的函数名是固定的,由“”+“类名类名”组成组成 析构函数没有返回值析构函数没有返回值 析构函数没有参数析构函数没有参数 如果没有自己写出析构函数,系统会自如果没有自己写出析构函数,系统会自动生成一个析构函数动生成一个析构函数3.4.2 析构函数析构函数v析构函数的特点析构函数的特点 析构函数在对象生命周期结束时由系统析构函数在对象生命周期结束时由系统自动调用自动调用3.4.2 析构函数析构函数【
23、例3-13】带有析构函数的长方体类。class Boxpublic:Box()/无参数的构造函数 length=1;width=1;height=1;Box(float L,float w,float h)/带有参数的构造函数 length=L;width=w;height=h;float Volume()return length*width*height;Box()/析构函数 coutDestructor of Box is called!endl;private:float length,width,height;int main()Box box1(4,2,3);Box box2;co
24、utVolume of box1 is box1.Volume()endl;coutVolume of box2 is box2.Volume()endl;return 0;程序执行后运行的结果如下:程序执行后运行的结果如下:Volume of box1 is 24Volume of box2 is 1Destructor of Box is called!Destructor of Box is called!3.4.3 构造函数和析构函数调用次序构造函数和析构函数调用次序v总的原则总的原则 当创建对象时调用构造函数,当释放对当创建对象时调用构造函数,当释放对象时调用析构函数象时调用析构函数
25、 创建对象是当程序执行到了非静态对象创建对象是当程序执行到了非静态对象的定义语句或第一次执行到静态对象的的定义语句或第一次执行到静态对象的定义语句定义语句 释放对象则是对象到了生命周期的最后释放对象则是对象到了生命周期的最后时系统释放对象或通过时系统释放对象或通过delete运算符动态运算符动态释放释放new运算符动态申请的对象运算符动态申请的对象3.4.3 构造函数和析构函数调用次序构造函数和析构函数调用次序【例例3-14】验证调用构造函数和析构函数的顺序验证调用构造函数和析构函数的顺序的例子。的例子。教材教材P733.4.3 构造函数和析构函数调用次序构造函数和析构函数调用次序#inclu
展开阅读全文