C程序设计《类和对象》.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C程序设计《类和对象》.ppt》由会员分享,可在线阅读,更多相关《C程序设计《类和对象》.ppt(63页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+程序设计 类和对象类和对象第第3章章 类和对象类和对象本章学习要点本章学习要点类和对象的概念及其关系类和对象的定义及其使用构造函数与析构函数的作用及使用对象与指针对象与const对象的赋值和复制对象作为函数的参数学生信息管理系统中类和对象的实例第第3章章 类和对象类和对象本章学习目标本章学习目标正确理解类和对象以及封装的概念熟练掌握类和对象的定义及其使用理解构造函数与析构函数的作用及使用掌握对象与指针及const的特点及使用理解并掌握对象的赋值和复制理解对象作为函数的参数传递的实质掌握基本的面向对象的设计与实现3.1类的声明和对象的定义类的声明和对象的定义v面向对象的核心是对象面向对象的核
2、心是对象v系统是由一个一个对象构成的系统是由一个一个对象构成的v对象是由类实例化得到的对象是由类实例化得到的v程序员在程序设计时是针对类进行的程序员在程序设计时是针对类进行的v本节主要是关于类和对象的概念以及本节主要是关于类和对象的概念以及类的声明和对象的定义类的声明和对象的定义 3.1.1 类和对象的概念及关系类和对象的概念及关系v对象对象封装了数据及在这些数据之上的操作的封装了数据及在这些数据之上的操作的封装体封装体 v类类对具有相同属性和操作的一组对象的抽对具有相同属性和操作的一组对象的抽象描述象描述 v类和对象的关系类和对象的关系 类是对象的抽象;对象是对类的实例化类是对象的抽象;对象
3、是对类的实例化类和对象的关系类和对象的关系3.1.2 类类的声明的声明class 类名public:公用成员protected:受保护成员private:私有成员;声明类的一般形式:声明类的关键字合法标识符公用成员限定符受保护成员限定符私有成员限定符类结束要加分号3.1.2 类类的声明的声明【例3-1】声明一个学生类,要求包括学生的学号、姓名、性别等信息,并且能够显示学生的信息。/=class Student /声明Student类public:/以下部分为公用成员函数void Show()coutNo.:stuNoendl;coutName:stuNameendl;coutSex:stuSe
4、xendl;private:/以下部分是私有数据成员int stuNo;char stuName20;char stuSex;/类声明结束,此处必须有分号/=3.1.2 类类的声明的声明1.1.类的成员分为数据成员和成员函数类的成员分为数据成员和成员函数2.2.成员的可访问性可分为三类:私有的(成员的可访问性可分为三类:私有的(privateprivate)、受保)、受保护的(护的(protectedprotected)、公用的()、公用的(publicpublic)3.3.由访问限定符限定它后面的成员的访问属性,直到出现由访问限定符限定它后面的成员的访问属性,直到出现下一个访问限定符或者类的
5、结束为止下一个访问限定符或者类的结束为止4.4.在声明类时,这三种访问属性的成员的声明次序是任意在声明类时,这三种访问属性的成员的声明次序是任意的,并且在一个类的声明中不一定这三种访问属性全部都的,并且在一个类的声明中不一定这三种访问属性全部都出现,可能只出现两种或一种。出现,可能只出现两种或一种。5.5.某个成员访问限定符在一个类的声明中也可以出现多次。某个成员访问限定符在一个类的声明中也可以出现多次。注意注意3.1.3 对象的定义对象的定义v声明类之后,再定义对象声明类之后,再定义对象如:如:Student zhang,wang;或:或:class Student zhang,wang;v
6、在声明类的同时定义对象在声明类的同时定义对象如:如:class Student zhang,wang;v不出现类名,直接定义对象不出现类名,直接定义对象如:如:class zhang,wang;声明类时系统并不分配内存单元,而定义对象时系统声明类时系统并不分配内存单元,而定义对象时系统会给每个对象分配内存单元会给每个对象分配内存单元3.2.1成员函数的性质成员函数的性质v不属于任何类的函数称为普通函数不属于任何类的函数称为普通函数 v成员函数隶属于某个类成员函数隶属于某个类v成员函数与普通函数的区别成员函数与普通函数的区别成员函数是属于某个类成员函数是属于某个类,定义在类的内部定义在类的内部成
7、员函数可以指定为访问属性成员函数可以指定为访问属性成员函数可以访问本类的任何成员成员函数可以访问本类的任何成员普通函数只能访问对象的公用成员普通函数只能访问对象的公用成员v对于成员函数,一般是将需要被类外调用对于成员函数,一般是将需要被类外调用的声明为公用的,不需要被类外调用的声的声明为公用的,不需要被类外调用的声明为私有的明为私有的 3.2.1成员函数的性质成员函数的性质v不属于任何类的函数称为普通函数不属于任何类的函数称为普通函数 v成员函数隶属于某个类成员函数隶属于某个类v成员函数与普通函数的区别成员函数与普通函数的区别成员函数是属于某个类成员函数是属于某个类,定义在类的内部定义在类的内
8、部成员函数可以指定为访问属性成员函数可以指定为访问属性成员函数可以访问本类的任何成员成员函数可以访问本类的任何成员普通函数只能访问对象的公用成员普通函数只能访问对象的公用成员v对于成员函数,一般是将需要被类外调用对于成员函数,一般是将需要被类外调用的声明为公用的,不需要被类外调用的声的声明为公用的,不需要被类外调用的声明为私有的明为私有的 3.2.2在类外定义成员函数在类外定义成员函数【例3-4】将Student类的成员函数改为在类外定义的形式。/=class Student /声明Student类类型public:/以下部分为公用成员函数void Show();private:/以下部分是私
9、有数据成员int stuNo;char stuName20;char stuSex;/类声明结束void Student:Show()/在类的声明之外定义成员函数coutNo.:stuNoendl;coutName:stuNameendl;coutSex:stuSexendl;/=3.2.2在类外定义成员函数在类外定义成员函数(1 1)成员函数在类内定义或是在类外定义,对程序执行)成员函数在类内定义或是在类外定义,对程序执行的效果基本一样。的效果基本一样。(2 2)在类外定义成员函数时,必须首先在类内写出成员)在类外定义成员函数时,必须首先在类内写出成员函数的原型,然后再在类外定义函数的原型,
10、然后再在类外定义。(3 3)如果在类外有函数定义,但是在函数名前没有类名)如果在类外有函数定义,但是在函数名前没有类名和作用域运算符进行限定,则该函数被认为是普通函数。和作用域运算符进行限定,则该函数被认为是普通函数。(4 4)如成员函数的函数体很短,也可以将其定义在类内。)如成员函数的函数体很短,也可以将其定义在类内。(5 5)在类内声明成员函数,在类外定义成员函数,是软)在类内声明成员函数,在类外定义成员函数,是软件工程中要求的良好的编程风格件工程中要求的良好的编程风格。注意注意3.2.3 inline成员函数成员函数vinline函数函数在编译时将被调用函数的代码直接嵌入在编译时将被调用
11、函数的代码直接嵌入到调用函数处到调用函数处 vinline成员函数就是将类中的成员函数成员函数就是将类中的成员函数声明为内置的声明为内置的 当类中的成员函数是在类内定义时,默当类中的成员函数是在类内定义时,默认该成员函数是认该成员函数是inline成员函数成员函数 如果成员函数定义在类的外部,则在成如果成员函数定义在类的外部,则在成员函数声明或定义前必须要有员函数声明或定义前必须要有inline关键关键字字 3.2.4 成员函数的存储方式成员函数的存储方式v实例化对象时需要分配内存空间,数实例化对象时需要分配内存空间,数据和函数都需要存储空间据和函数都需要存储空间v同一个类的不同对象的数据是不
12、一样同一个类的不同对象的数据是不一样的,因此要为每个对象的数据成员分的,因此要为每个对象的数据成员分配内存单元配内存单元v同一个类的不同对象的函数是一样的,同一个类的不同对象的函数是一样的,因此将同类的所有对象的函数放在一因此将同类的所有对象的函数放在一个公共的区域。个公共的区域。3.2.4 成员函数的存储方式成员函数的存储方式【例3-5】类的对象占用内存空间实验。/=#include using namespace std;class Testpublic:void Show()coutchar in Test is:cendl;private:char c;int main()Test t
13、est;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:c”运算符方便直运算符方便直观的进行,观的进行,“-”称为指向运算符。称为指向运算符。例如:Test test1;test1.Set(a);Test*pTest=&test1;test1.
14、Show();pTest-Show();此处两个语句的执行结果完全此处两个语句的执行结果完全相同,只是采用了不同的访问相同,只是采用了不同的访问对象成员的形式而已对象成员的形式而已。3.3.3 通过引用访问成员通过引用访问成员v对象的引用和普通变量的引用在本质对象的引用和普通变量的引用在本质上是一样的上是一样的 v通过对象的引用访问对象成员和通过通过对象的引用访问对象成员和通过对象访问成员形式上是一样的对象访问成员形式上是一样的例如:Test test1;test1.Set(a);Test&refTest=test1;test1.Show();refTest.Show();此处两个语句的执行结
15、果完全此处两个语句的执行结果完全相同,只是采用了不同的访问相同,只是采用了不同的访问对象成员的形式而已对象成员的形式而已。3.4.1构造函数构造函数v构造函数的作用构造函数的作用创建对象时对对象的数据成员初始化创建对象时对对象的数据成员初始化 v构造函数的特点构造函数的特点构造函数与类名相同,且没有返回值构造函数与类名相同,且没有返回值 构造函数不需要用户调用,由系统在创构造函数不需要用户调用,由系统在创建对象时自动调用的建对象时自动调用的 构造函数内容一般是初始化数据语句,构造函数内容一般是初始化数据语句,但也可以是其他的语句但也可以是其他的语句创建对象时肯定会执行一个构造函数创建对象时肯定
16、会执行一个构造函数3.4.1构造函数构造函数v带参数的构造函数带参数的构造函数 一般格式为:构造函数名一般格式为:构造函数名(参数表参数表);实参是在定义对象时给出的,一般格式实参是在定义对象时给出的,一般格式为:类名为:类名 对象名对象名(实参表实参表);v带参数的构造函数形式可以方便的实带参数的构造函数形式可以方便的实现对不同对象进行不同的初始化现对不同对象进行不同的初始化 3.4.1构造函数构造函数【例3-10】定义两个长方体,分别求出它们的体积。这两个长方体的长宽高分别是4,2,3和5,1,2。#include using namespace std;class Boxpublic:B
17、ox(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 box1 is box1.Volume()endl;coutVolume of box2 is box2.Volume()endl;return 0;3.4.1构造函数构造函数v构造函数与参
18、数初始化表构造函数与参数初始化表 这种方法不在构造函数的函数体内对数这种方法不在构造函数的函数体内对数据成员初始化,而是在函数的首部实现据成员初始化,而是在函数的首部实现 例如: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;使用参数初始化表的构造函数3.4.1构造函数构造函数v 构造函数重载构造函数重载 在类中定义多个构造函数,这些构造函在类中定义
19、多个构造函数,这些构造函数具有相同的函数名而参数表中参数的数具有相同的函数名而参数表中参数的个数或类型不同个数或类型不同相当于给类实例化对象时提供了不同的相当于给类实例化对象时提供了不同的初始化方法初始化方法 3.4.1构造函数构造函数【例3-12】构造函数重载。/=#include using namespace std;class Boxpublic:Box()/无参数的构造函数 length=1;width=1;height=1;Box(float L,float w,float h)/带有参数的构造函数 length=L;width=w;height=h;float Volume()r
20、eturn 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构造函数构造函数(1)(1)如果在类的声明中没有写一个构造函数,系统会自动生如果在类的声明中没有写一个构造函数,系统会自动生成一个无参的、函数体为空的
21、默认构造函数。默认构造函成一个无参的、函数体为空的默认构造函数。默认构造函数只是在形式上保证创建对象时必须有构造函数。数只是在形式上保证创建对象时必须有构造函数。(2)(2)在程序中定义对象时一定要注意类中有几个构造函数,在程序中定义对象时一定要注意类中有几个构造函数,它们要求的参数分别是什么样的,如果创建对象时给出的它们要求的参数分别是什么样的,如果创建对象时给出的参数表和所有的构造函数的参数表都不符合,则系统无法参数表和所有的构造函数的参数表都不符合,则系统无法创建对象。创建对象。(3)(3)使用参数实例化对象时的格式是:使用参数实例化对象时的格式是:类名类名 对象名(实参对象名(实参表)
22、表);。而使用默认构造函数实例化对象时的格式是:类名。而使用默认构造函数实例化对象时的格式是:类名 对象名对象名;注意注意3.4.2 析构函数析构函数v析构函数的作用析构函数的作用在系统释放对象之前进行清理工作。在系统释放对象之前进行清理工作。v析构函数的特点析构函数的特点析构函数的函数名是固定的,由析构函数的函数名是固定的,由“”+“类名类名”组成组成析构函数没有返回值析构函数没有返回值析构函数没有参数析构函数没有参数如果没有自己写出析构函数,系统会自如果没有自己写出析构函数,系统会自动生成一个析构函数动生成一个析构函数3.4.2 析构函数析构函数v析构函数的特点析构函数的特点析构函数在对象
23、生命周期结束时由系统析构函数在对象生命周期结束时由系统自动调用自动调用 析构函数的作用不是释放对象,释放对象是由系统来析构函数的作用不是释放对象,释放对象是由系统来进行的,而是在系统释放对象之前进行一些清理工作,把进行的,而是在系统释放对象之前进行一些清理工作,把对象所占用的额外内存空间归还给系统对象所占用的额外内存空间归还给系统注意注意3.4.2 析构函数析构函数【例3-13】带有析构函数的长方体类。/=class Boxpublic:Box()/无参数的构造函数 length=1;width=1;height=1;Box(float L,float w,float h)/带有参数的构造函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 类和对象 程序设计 对象
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内