C程序设计02章类与对象课件_第1页
C程序设计02章类与对象课件_第2页
C程序设计02章类与对象课件_第3页
C程序设计02章类与对象课件_第4页
C程序设计02章类与对象课件_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 1页页 在现实生活中,对象通常是有形的在现实生活中,对象通常是有形的( (如一个人、一辆车如一个人、一辆车) ),但也可,但也可以是无形的以是无形的( (如一项计划、一件事情如一项计划、一件事情) )。总之,。总之,。它具有两方面的特征:。它具有两方面的特征:( (如人的身如人的身高、体重、年龄、性别高、体重、年龄、性别) )和和( (琴棋书画、能歌善舞琴棋书画、能歌善舞) ),前者表,前者表示对象的示对象的,后者表示对象的,后

2、者表示对象的。 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 2页页数数 据据操作代码操作代码对对象象 面向对象的程序设计方法,实际上就是将现实生活中对象面向对象的程序设计方法,实际上就是将现实生活中对象的概念应用到了程序设计领域。它的基本点是尽可能地按照人的概念应用到了程序设计领域。它的基本点是尽可能地按照人类认识世界的方法和思维方式来分析和解决问题。把要研究的类认识世界的方法和思维方式来分析和解决问题。把要研究的事、物、概念等都称为对象,以对象为基本元素,作为分析和事、物

3、、概念等都称为对象,以对象为基本元素,作为分析和解决问题的核心。解决问题的核心。 程序设计中的对象概念也包括两方面的特征:程序设计中的对象概念也包括两方面的特征:数据数据( (对对应应“属性属性”) )和和操作操作( (对应对应“功能功能”) ),如下图所示:,如下图所示: 其中的数据我们称为其中的数据我们称为数据成员数据成员(data member)(data member),操作我们称为,操作我们称为成成员函数员函数(member function)(member function)。 LanJimin copyright Thursday, January 27, 2022 四川理工学院

4、计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 3页页(一个国家的最高政权机关所在地,是全国的政治中心)(一个国家的最高政权机关所在地,是全国的政治中心)(能制造工具并使用工具进行劳动的高等动物)(能制造工具并使用工具进行劳动的高等动物) LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 4页页 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 5页页

5、 在在C+C+中定义一个中定义一个“类类”类型的方法和定义一个结构体类类型的方法和定义一个结构体类型的方法是相似的型的方法是相似的 。1 1、结构体类型和结构体变量的定义、结构体类型和结构体变量的定义 struct student int num; char name10 char sex ; struct student student 1,student2; 以上结构体变量以上结构体变量只包含了数据(变量),只包含了数据(变量),没有包含对数据没有包含对数据进行处理的任何操作。若需要对数据进行处理,则必须另外编进行处理的任何操作。若需要对数据进行处理,则必须另外编写有关的操作语句。写有关的

6、操作语句。 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 6页页n 定义定义“类类”的方法是的方法是由定义结构体类型的方法演变而来由定义结构体类型的方法演变而来的。的。它除了包含数据部分,还包含了对这些数据的操作部分。它除了包含数据部分,还包含了对这些数据的操作部分。n StudStud是一个类名,其是一个类名,其表示,以示与对表示,以示与对象名的区别象名的区别2 2、类和对象的定义、类和对象的定义 LanJimin copyright Thursday, January 2

7、7, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 7页页 #include #include #include #include class Stud / 声明以下部分为私有的声明以下部分为私有的 int num; char name10; char sex ; / 声明以下部分为公有的声明以下部分为公有的 void init(int number, char string , char c ) num=number; strcpy(name, string); sex=c; void display( ) cout”num:”numendl; cout

8、”name:”nameendl; cout”sex:”sexendl; / ; Stud stud1,stud2; / 定义了定义了stud类的两个对象类的两个对象 3 3、类的成员分类:、类的成员分类:方式方式来划分的,它包括三来划分的,它包括三 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 8页页 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 9页页 L

9、anJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 10页页 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 11页页 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 12页页class Stud private: public:void init(i

10、nt number, char string , char c ) num=number; strcpy(name, string); sex=c; void display( ) cout”num:”numendl; cout”name:”nameendl; cout”sex:”sexnum=number; strcpy(this-name, string); this-sex=c;这样,当你在程序中调用:这样,当你在程序中调用: stud1.init(10010,”LiMin”,F); stud2.init(10011,”ZhangYang”,M);时,编译器又会将他们对应地改为:时,编译

11、器又会将他们对应地改为: stud:init(10010,”LiMin”,F,(stud *)&stud1); stud:init(10011,”ZhangYang”,M,(stud *)&stud2);可见,在系统中每个成员函数只有一份,可见,在系统中每个成员函数只有一份,所有同类的不同对象都调用所有同类的不同对象都调用同一份成员函数同一份成员函数。而同类的不同对象却具有不同的数据成员空间。而同类的不同对象却具有不同的数据成员空间。 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程

12、序设计程序设计 第第 14页页 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 15页页 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 16页页注意:把构造函数和其它成员函数放在外注意:把构造函数和其它成员函数放在外部定义时部定义时, ,其函数名前要加上其函数名前要加上“类名类名:”:”。因为在类定义的外部,可能有各种函数定因为在类定义的外部,可能有各种函数定

13、义,为了区分成员与非成员函数,区分此义,为了区分成员与非成员函数,区分此类成员函数和彼类成员函数,所以加上类成员函数和彼类成员函数,所以加上“类名类名:”:”是必要的。是必要的。构造函数的定义可以放到类的外部,比如:构造函数的定义可以放到类的外部,比如: LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 17页页 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 1

14、8页页 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 19页页关于构造函数的几点重要说明:关于构造函数的几点重要说明:1、C+规定,每个类必须至少要有一个构造函数,没有构造函数,就规定,每个类必须至少要有一个构造函数,没有构造函数,就不能创建任何对象。不能创建任何对象。2、在定义一个类时,如果一个构造函数也不提供,则、在定义一个类时,如果一个构造函数也不提供,则C+编译系统会编译系统会自动为其提供一个默认的构造函数,该构造函数是一个无参构造自动为其提供一个默认的构造函数,该构

15、造函数是一个无参构造函数,它只负责创建对象,而不进行初始化函数,它只负责创建对象,而不进行初始化(P348有误有误)。 与变量定义相似,在用默认构造函数创建对象时,如果创建与变量定义相似,在用默认构造函数创建对象时,如果创建的是全局对象或静态对象,则该对象的位模式的是全局对象或静态对象,则该对象的位模式(即数据成员的每一即数据成员的每一位位)全为全为0,否则,对象值是随机的。,否则,对象值是随机的。3、只要在定义类时为其提供了一个构造函数、只要在定义类时为其提供了一个构造函数(不管它是有参的还是无不管它是有参的还是无参的参的),编译系统就不再为其提供默认构造函数了。,编译系统就不再为其提供默认

16、构造函数了。 因此,如果我们为类定义了一个有参的构造函数,还想要一因此,如果我们为类定义了一个有参的构造函数,还想要一个无参的构造函数,则还得必须自己定义。个无参的构造函数,则还得必须自己定义。 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 20页页例如:下面的代码只定义了一个有参的构造函数,面对创建无参例如:下面的代码只定义了一个有参的构造函数,面对创建无参对象,将不能正确地编译。对象,将不能正确地编译。#includeclass Student public: Stude

17、nt(char * pName) strcpy(name, pName); namesizeof(name)-1=0; protected: char name20;void main( ) Student noName; / error:企图调用无参构造函数创建对象,企图调用无参构造函数创建对象, / 但类定义中却没有与之匹配的构造函数。但类定义中却没有与之匹配的构造函数。 Student classmate(“Jenny”); / ok要避免如下的错误,只需在此增要避免如下的错误,只需在此增加一个无参的构造函数便可:加一个无参的构造函数便可:Student ( ) sizeof(name)

18、测出的值为测出的值为20;则此语句的作用是:避免因则此语句的作用是:避免因传递进来的字符串长度大于传递进来的字符串长度大于name数组的长度,引起结束数组的长度,引起结束标志的丢失。标志的丢失。 LanJimin copyright Thursday, January 27, 2022 四川理工学院计算机学院四川理工学院计算机学院 C+程序设计程序设计 第第 21页页1 1、析构函数的作用:、析构函数的作用: 在创建一个对象时,构造函数除了要为对象本身在创建一个对象时,构造函数除了要为对象本身( (数据成员数据成员) )分分配相应的空间以外,还可能分配其它的资源,比如:在构造函数中配相应的空间

19、以外,还可能分配其它的资源,比如:在构造函数中打开一个文件,或者从堆中分配一片内存。所有这些资源在对象生打开一个文件,或者从堆中分配一片内存。所有这些资源在对象生命期结束之前必须被释放。这项任务是由专门的析构函数来完成的。命期结束之前必须被释放。这项任务是由专门的析构函数来完成的。当对象脱离其作用域时,系统会自动调用析构函数当对象脱离其作用域时,系统会自动调用析构函数,“,“清理善后清理善后”工工作。作。2 2、析构函数的使用:、析构函数的使用: 析构函数名也与类名相同,但要在函数名前面加一个波浪符析构函数名也与类名相同,但要在函数名前面加一个波浪符 ,例如例如 stud(), stud(), 以示区别于构造函数。以示区别于构造函数。 析构函数也是一个特殊的类成员函数,它没有返回类型,没有析构函数也是一个特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也不能被重载。参数,不能随意调用,也不能被重载。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论