[计算机软件及应用]C++面向对象程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[计算机软件及应用]C++面向对象程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件及应用 计算机软件 应用 C+ 面向 对象 程序设计 课件
- 资源描述:
-
1、 第3章 类和对象 3.1 类的构成 3.2 成员函数的定义 3.3 对象的定义和使用 3.4 构造函数与析构函数 3.5 对象的赋值与复制 3.6 自引用指针this 3.7 C+的string类本章主要内容 3.1 类的构成 3.1.1 从结构体到类 3.1.2 类的构成本节主要内容3.1.1 3.1.1 从结构体到类 1.结构体的扩充 例如下面声明了一个日期结构体:struct Date int year;/年 int month;/月 int day;/日 ;C语言结构体一般格式如下:struct 结构名 数据;例例3.1 3.1 有关日期结构体的例子。有关日期结构体的例子。#incl
2、udeiostream#include using namespace std;using namespace std;structstruct Date /Date /声明了一个名为声明了一个名为DateDate的结构体的结构体 intint year;year;int int month;month;int int day;day;intint main()main()Date date1;Date date1;date1.year=2010;/date1.year=2010;/可以在结构体外直接访问数据可以在结构体外直接访问数据yearyear date1.month=8;/date1.
3、month=8;/可以在结构体外直接访问数据可以在结构体外直接访问数据monthmonth date1.day=25;/date1.day=25;/可以在结构体外直接访问数据可以在结构体外直接访问数据dayday cout coutdate1.year.date1.month.date1.year.date1.month.date1.dayendl date1.dayendl;return 0;return 0;程序的运行结果如下程序的运行结果如下:2010.8.252010.8.25 C语言中的结构体缺点:结构体变语言中的结构体缺点:结构体变量可以在结构体外直接访问数据量可以在结构体外直接访
4、问数据,在在C结构体中的数据是很不安全的结构体中的数据是很不安全的。C+C+中引入了中引入了类的概念类的概念,克克服了服了C C结构体的缺点。结构体的缺点。C+中引入了类的概念,它不仅可以含有数据,而且还可以含有函数。类中的数据和函数,分别称作数据成员和成员函数。类声明的简化格式如下类声明的简化格式如下:class class 类名类名 数据数据 函数函数;类的声明由关键字类的声明由关键字classclass打头打头,后跟后跟类名类名花括号中是花括号中是类体类体以一个分号以一个分号“;”;”结束结束类声明的简化格式如下类声明的简化格式如下:class class 类名类名 数据数据成员成员 函
5、数函数函数函数;3.1.2 类的构成 在类中,数据成员和成员函数分别属于private部分、和public部分。数据成员和成员函数一般也统称为类的成员。类声明的一般格式如下:class class 类名类名 public:public:公有数据成员公有数据成员;公有成员函数公有成员函数;private:private:私有数据成员私有数据成员;私有成员函数私有成员函数;公有成员公有成员既可被类内的成既可被类内的成员函数访问员函数访问,也可被类的外部也可被类的外部访问访问,是类与外界的接口。是类与外界的接口。私有成员私有成员只能被类内只能被类内的成员函数访问的成员函数访问,而类外而类外部的任何访
6、问都是非法的。部的任何访问都是非法的。用一个类Date来描述日期,其形式如下:class Dateclass Date public:public:void setDate(int y,int m,int void setDate(int y,int m,int d);/d);/公有成员函数公有成员函数 void showDatevoid showDate();/();/公有成员函数公有成员函数 private:private:int int year;/year;/私有数据成员私有数据成员 intint month;/month;/私有数据成员私有数据成员 intint day;/day;/
7、私有数据成员私有数据成员;私有数据成员私有数据成员yearyear、monthmonth和和dayday只只能由内部成员函数访能由内部成员函数访问问,在类的外部无法在类的外部无法访问访问,保护了私有数保护了私有数据的安全据的安全。设置日期成员设置日期成员函数函数setDatesetDate和日期和日期显示成员函数显示成员函数showDateshowDate都是公有都是公有的成员函数的成员函数,类外部类外部对类对类DateDate的数据进的数据进行操作行操作,只能通过这只能通过这两个函数来实现。两个函数来实现。说明:(1)除了private和public之外,类中的成员还可以用另一个关键字 pr
8、otected来说明。被protected说明的数据成员和成员函数称为保护成员。类声明的完整格式如下:class class 类名类名 public:public:公有数据成员公有数据成员;公有成员函数公有成员函数;protected:protected:保护数据成员保护数据成员;保护成员函数保护成员函数;private:private:私有数据成员私有数据成员;私有成员函数私有成员函数;保护成员保护成员可以由本类的成员函数访可以由本类的成员函数访问问,也可以由本类的派生类的成员函也可以由本类的派生类的成员函数访问数访问,而类外的任何访问都是非法而类外的任何访问都是非法的的,将在第将在第5 5
9、章详细介绍。章详细介绍。(2)对一个具体的类来讲,类声明格式中的3个部分并非一定要全有,但至少要有其中的一个部分。一般情况下,一个类的数据成员应该声明为私有成员,成员函数声明为公有成员。这样,内部的数据整个隐蔽在类中,在类的外部根本就无法看到,使数据得到有效的保护。(3)类声明中的private、protected和public三个关键字可以按任意顺序出现任意次。但是,如果把所有的私有成员、保护成员和公有成员归类放在一起,程序将更加清晰。(4)C+规定,在默认情况下(即没有指定成员是私有、保护或公有时),类中的成员是私有的。例例3.2 3.2 将例将例3.13.1中的结构体中的结构体struc
10、tstruct改为类改为类classclass。#includeiostream#include using namespace std;using namespace std;class Dateclass Date /将例将例3.13.1中的结构体中的结构体structstruct改为类改为类classclass intint year;/year;/私有数据成员私有数据成员 intint month;/month;/私有数据成员私有数据成员 intint day;/day;/私有数据成员私有数据成员;intint main()main()Date date1;Date date1;dat
11、e1.year=2010;/date1.year=2010;/错误错误,在类外不能访问私有数据成员在类外不能访问私有数据成员yearyeardate1.month=8;/date1.month=8;/错误错误,在类外不能访问私有数据成员在类外不能访问私有数据成员monthmonthdate1.day=25;/date1.day=25;/错误错误,在类外不能访问私有数据成员在类外不能访问私有数据成员day day coutcoutdate1.year.date1.month.“date1.year.date1.month.“date1.dayendl date1.dayendl;/;/错误错误,
12、不能访问私有数据成员不能访问私有数据成员 return 0;return 0;私有成员私有成员只能被类只能被类内的成员函数访问内的成员函数访问,而类外部的任何访而类外部的任何访问都是非法的。问都是非法的。如何才能访问类中的私有数据成员呢?将如何才能访问类中的私有数据成员呢?将在在3.23.2节作详细的介绍。节作详细的介绍。#includeiostream#include /例例3.1 3.1 有关日期结构体的例子。有关日期结构体的例子。using namespace std;using namespace std;structstruct Date/Date/声明了一个名为声明了一个名为Dat
13、eDate的结构体的结构体 intint year;/year;/公有的公有的数据成员数据成员 intint month;/month;/公有的公有的数据成员数据成员 intint day;/day;/公有的公有的数据成员数据成员intint main()main()Date date1;Date date1;date1.year=2010;/date1.year=2010;/可以可以在结构体外直接访问数据在结构体外直接访问数据yearyear date1.month=8;/date1.month=8;/可以可以在结构体外直接访问数据在结构体外直接访问数据monthmonth date1.da
14、y=25;/date1.day=25;/可以可以在结构体外直接访问数据在结构体外直接访问数据dayday cout coutdate1.year.date1.month.date1.year.date1.month.date1.dayendl date1.dayendl;return 0;return 0;程序的运行结果如下程序的运行结果如下:2010.8.252010.8.25 在默认情况下在默认情况下,结构体中的成员是结构体中的成员是公有的公有的。因此。因此,例例3.13.1中数据成员中数据成员yearyear、monthmonth和和dayday默认为是公有的默认为是公有的,结构体外结构
15、体外的变量的变量date1date1能够对它们直接进行访问能够对它们直接进行访问(5)不能在类声明中给数据成员赋初值。例如:class abc private:char a=q;/错误 int b=33;/错误 public:;C+规定,只有在对象定义之后才能给数据成员赋初值 3.2 成员函数的定义 3.2.1 普通成员函数的定义3.2.2 内联成员函数的定义本节主要内容3.2.1 普通成员函数的定义 将成员函数以普通成员函数(即非内联的成员函数)的形式进行定义。在类声明中只给出成员函数的原型,而将成员函数的定义放在类外部。例如:Student成员函数名(参数表)成员函数成员函数在类外在类外定
16、义的一般形式是:定义的一般形式是:返回值类型返回值类型 类名类名 成员函数名成员函数名(参数表参数表)函数体函数体 在在类名类名和和成员成员函数名函数名之之间应加上作用域运算符间应加上作用域运算符“”class Student /学生类的定义-1private:int number;float score;public:void input(int number1,float score1);/函数原型1,输入成绩 void modify(float score1);/函数原型2,修改成绩 void print();/函数原型3,打印成绩;void Student:input(int numb
17、er1,float score1)/函数定义1 number=number1;score=score1;void Student:modify(float score1)/函数定义2 score=score1;void Student:print()/函数定义3 coutnnumber:number score:score;在在类声明中类声明中只给出成员函数只给出成员函数的原型,而将的原型,而将成员函数的定义放成员函数的定义放在类外部在类外部。在函数名前应加上类名和作用域运算符“”说明:(1)在类声明中,成员函数原型的参数表中可以不说明参数的名字,而只说明它们的类型。例如:void modif
18、y(floatvoid modify(float score1);score1);但是,在类外定义成员函数时,不但要说明参数表中参数的类型,还必须要指出其参数名。例如:void Student:modify(floatvoid Student:modify(float score1score1)score=score1;score=score1;(2)采用“在类声明中只给出成员函数的原型,而将成员函数的定义放在类的外部”的定义方式,是C+程序设计的良好习惯。3.2.2 内联成员函数的定义 (1)隐式声明 将成员函数直接定义在类的内部。例如:class Studentclass Student
19、/学生类的定义学生类的定义-2-2 private:private:int int number;number;float score;float score;public:public:void input(int void input(int number1,float score1)number1,float score1)/定义定义成员成员函数函数 number=number1;number=number1;score=score1;score=score1;void modify(float void modify(float score1)/score1)/定义定义成员成员函数函数
20、 score=score1;score=score1;void print()void print()/定义成员函数定义成员函数 coutnnumber coutnnumber:number score:score;:number score:score;将成员函数直接将成员函数直接定义在类内部,编译定义在类内部,编译时是作为内联函数的时是作为内联函数的方式来处理方式来处理(内联函内联函数数隐式定义隐式定义)(2)(2)显式声明显式声明 在类声明中只给出成员函数的原型,而成员函数的定义放在类外部。但在类外部成员函数的定义前冠以关键字“inline”,使它起到内联函数的作用。class Stud
21、entclass Student private:private:int int number;number;float score;float score;public:public:void input(intvoid input(int number1,float score1);number1,float score1);.;inlineinline void Student:input(intvoid Student:input(int number1,float score1)number1,float score1)number=number1;score=score1;numb
22、er=number1;score=score1;成员函数的原型成员函数的原型冠以关键字冠以关键字“inlineinline”使用 inline定义内联函数时,可以在声明函数原型和定义函数时同时写inline,也可以在其中一处声明inline,效果是相同的,都能按内联函数处理。但是,必须将类的声明和内联成员函数的定义都放在同一个文件(或同一个头文件)中,否则编译时无法进行代码置换。class Student /学生类的定义学生类的定义-3-3 private:int number;float score;public:inline void input(int number1,float sco
23、re1);/函数原型函数原型1 1 inline void modify(float score1);/函数原型函数原型2 2 inline void print();/函数原型函数原型3 3;inline void Student:input(int number1,float score1)number=number1;/函数定义函数定义1 1 score=score1;inline void Student:modify(float score1)score=score1;/函数定义函数定义2 2 inline void Student:print()/函数定义函数定义3 3 coutn
24、number:number score:score;冠以关键字冠以关键字“inlineinline”3.3 对象的定义和使用 3.3.1 类与对象的关系 3.3.2.对象的定义 3.3.3 对象中成员的访问 3.3.4 类的作用域和类成员的访问属性 本节主要内容3.3.1 类与对象的关系 在C+中,类与对象间的关系,可以用数据类型int和整型变量i之间的关系来类比。类类型和int类型均代表的是一般的概念,而对象和整型变量却是代表具体的东西。数据类型 实 例 int a,b(变量)学生类 张三,李四(对象)水果类 苹果,桔子(对象)3.3.2.对象的定义 定义对象可以用以下两种方法:方法 1:在
25、声明类的同时,直接定义对象,即在声明类的右花括号“”后,直接写出属于该类的对象名表。例如:class Student /.stu1,stu2;在声明类在声明类Student Student 的同的同时,直接定义对象时,直接定义对象stu1stu1和和stu2stu2 方法 2:声明了类之后,在使用时再定义对象。其一般形式如下:class Student /;Student stu1,stu2;在在使用时使用时再定义对象再定义对象,此时定义了类此时定义了类StudentStudent的的两个对象两个对象stu1stu1和和stu2stu2说明:说明:声明了一个类便声明了一声明了一个类便声明了一种
展开阅读全文