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