c++语言简明教程 教学课件 ppt 作者 吴延海_ 第3章

上传人:E**** 文档编号:89343687 上传时间:2019-05-23 格式:PPT 页数:135 大小:410KB
返回 下载 相关 举报
c++语言简明教程 教学课件 ppt 作者 吴延海_ 第3章_第1页
第1页 / 共135页
c++语言简明教程 教学课件 ppt 作者 吴延海_ 第3章_第2页
第2页 / 共135页
c++语言简明教程 教学课件 ppt 作者 吴延海_ 第3章_第3页
第3页 / 共135页
c++语言简明教程 教学课件 ppt 作者 吴延海_ 第3章_第4页
第4页 / 共135页
c++语言简明教程 教学课件 ppt 作者 吴延海_ 第3章_第5页
第5页 / 共135页
点击查看更多>>
资源描述

《c++语言简明教程 教学课件 ppt 作者 吴延海_ 第3章》由会员分享,可在线阅读,更多相关《c++语言简明教程 教学课件 ppt 作者 吴延海_ 第3章(135页珍藏版)》请在金锄头文库上搜索。

1、,第3章 类 和 对 象,3.1 类 3.2 对象 3.3 静态成员 本章小结,面向对象技术已经席卷了整个软件界。面向对象技术采用人类在认识客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物。面向对象思想来源于对现实世界的认知。现实世界缤纷复杂、种类繁多,难于认识和理解,但是人们学会了把这些错综复杂的事物进行分类,从而使世界变得井井有条。面向对象技术的基本特征主要有抽象性、封装性、继承性和多态性。C+ 通过类来体现这些基本特征。,类和对象是容易混淆的概念。类是一个抽象的概念,对象则是类的具体实例,类在现实中并不真实存在,只是一个概念而已。比如人是一个类,而嬴政、孔子、老子

2、、孟子都是对象;首都是一个类,而北京、伦敦、莫斯科、东京、华盛顿都是对象;,3.1 类,动画猫是一个类,而Kitty(凯蒂猫)、Grafield(加菲猫)和Doraemon(机器猫)都是对象。我们可以说刘翔在跨栏比赛中夺冠,而不说人类在跨栏比赛中夺冠;可以说Garfield猫的体重是1.5 kg,而不能说猫类的体重是1.5 kg。从面向对象的角度看:数据类型是抽象的概念,是各个变量的归类,而变量是相应数据类型的具体实例,变量是相应数据类型的真实个体。,3.1.1 从结构体到类 在第2章学习了结构体类型,它是一种由用户自己定义的数据类型。可以使用结构体来描述现实世界中各种对象的属性,但无法描述这

3、些对象的行为。所有对象的行为需要通过另外编写函数来刻画(这破坏了面向对象思想里的封装特性)。比如用结构体类型描述猫可以这样描述: struct Cat char name30; float weight;,int age; ; 上面的有关猫的结构体类型算是一个不完善的用户自定义数据类型,因为通常对数据类型来说不但要有数据的内部表示以及表示范围,还要有相应的操作,如对int数据类型就有加减乘除等操作。 【例3.1】 为Cat定义mew操作。 /- /c0301.cpp /- #include “iostream.h“,struct Cat char name30; float weight; i

4、nt age; ; void mew(Cat arg); int main() Cat Grafield=“Grafield“,1.5,3; mew(Grafield);,return 0; void mew(Cat arg) cout“The Cat “ arg.name “ is mewing!“; cout“ weight: “ arg.weight “kg, age: “ arg.age; ,运行结果为 The Cat Grafield is mewing! weight: 1.5kg, age: 3 类与结构体是相似的,也是一种用户自定义的数据类型,可以通过成员变量来描述对象的属性及

5、刻画对象。不同之处在于类对属性的操作不是通过普通的函数(上面的例子就采用这种方式),而是通过成员函数。 下面介绍如何定义类: class 类名 数据类型 成员变量1; 数据类型 成员变量2;,; 从表面看如果只是定义成员变量,类和结构体非常相似,不同之处就是保留字class替代了struct。 把例3.1中的结构体Cat简单换成类Cat,其余部分不变化,能否得到同样的编译或运行效果呢?试着编译一下修改后的程序会得到很多编译错误信息。 产生这些错误的原因是:结构体和类的成员都可以用关键字public、private、protected等修饰(这些关键字的具体意义稍后详解),仅从英文字面看它们分别

6、表示成员的特性为共有的、私有的、保护的。默认情况下(不加这三个修饰关键字),结构体的成员都是共有的,类的成员都是私有的。,【例3.2】 类的成员。 /- /c0302.cpp /- #include “iostream.h“ 1 class Cat 2 public: char name30; float weight; int age; ;,void mew(Cat arg); int main() 3 Cat Grafield=“Grafield“,1.5,3; mew(Grafield); return 0; void mew(Cat arg) cout“The Cat “ arg.na

7、me “ is mewing!“; cout“ weight: “ arg.weight “kg, age: “ arg.age; ,相对例3.1来说,例3.2作了如下修改: (1) 语句1中,将struct改成class,将结构体Cat变成类Cat。 (2) 语句2中,添加了public:修饰关键字。将类Cat的成员变量都变成共有的,这样编译执行结果就和例3.1一样了。如果没有语句2,语句3中对类的成员变量进行赋值就会产生编译错误。,3.1.2 类的声明与定义 C+ 提供的类机制可以自定义真正意义上的数据类型。也就是说,不仅可以定义对象的属性,还可以定义相应的操作。类似函数的声明与定义,下面

8、是类的声明和定义的模式: class C; /类C的声明 int main() /主函数 ,class C /类C的定义 ; /一定要记得这个分号 还可以把类的定义放在一个头文件中,然后在另一个源文件中包含这个头文件。比如: /classC.h class C ,/main.cpp #include “classC.h“ /注意,这里必须用双引号,不能用 int main() 前面只是从结构体引入了类,但不是完整的类。类与结构体相比,不同之处在于类对属性的操作不是通过普通的函数,而是通过成员函数。对例3.2做进一步修改,添加成员函数,删除普通函数,成为一个完整的类声明与定义。,【例3.3】 完

9、整的类声明与定义。 /- /c0303.cpp /- #include “iostream.h“ 1 class Cat /声明类Cat public: /成员变量为公有的,char name30; float weight; int age; public: /成员函数为公有的 /声明mew成员函数,以前的普通函数(还带有参数的函数)变成了成员函数 void mew(); /注意“;” 2 ; int main() ,Cat Grafield=“Grafield“,1.5,3; /初始化类Cat的一个实例对象Grafield Grafield.mew(); /访问对象Grafield的mew

10、成员函数(或行为) return 0; 3 void Cat:mew() /定义类Cat的mew成员函数 cout“The Cat “ name “ is mewing!“; /成员变量name的访问方式有变化,cout“ weight: “ weight “kg, age: “ age; /成员变量weight、age的访问方式有变化 4 说明: (1) 语句1到语句2范围内的所有语句声明了类Cat,类Cat有3个public成员变量name、weight、age和1个public成员函数mew。,(2) 语句3到语句4范围内的所有语句定义了类Cat的成员函数mew。注意mew成员函数访问成

11、员变量name、weight、age时很简单,就像引用普通函数内的变量一样,不像访问结构体的成员变量那样需要用“.”操作符。 (3) 语句3中在定义成员函数mew时引入了作用域限定符“:”和前缀Cat,这表示mew函数属于类Cat(或Cat名空间),这样可以和普通函数区别开来。,3.1.3 成员函数 前面我们初步认识了类,其中类的成员函数可以将类和结构体区别开来。类的成员函数(也称类函数、类的方法)是一种函数,其用法和第1章中介绍的函数基本一样,同样有参数、返回值,只是它只属于一个类,是一个类的成员。类的成员函数是类的重要组成部分,如果一个类不包含成员函数,就可能退化成结构体了,体现不出面向对

12、象思想里的封装特性。,1. 成员函数的定义 成员函数的定义既可以写入类定义体,也可以写在类定义体外。在例3.3中成员函数mew的定义就在类定义体外。下面将成员函数写入类定义体。 【例3.4】 将成员函数写入类定义体。 /- /c0304.cpp /- #include “iostream.h“ class Cat ,public: char name30; float weight; int age; public: /在类定义体中定义mew,可以不用“Cat:”前缀(当然加上前缀也不会出错) void mew() ,cout“The Cat “ name “ is mewing!“; cou

13、t“ weight: “ weight “kg, age: “ age; /注意没有“;” ; int main() Cat Grafield=“Grafield“,1.5,3; Grafield.mew(); return 0; ,通过例3.3和例3.4我们可以知道,在类定义体中定义成员函数时不需要在函数名前加类名和“:”,因为这种成员函数肯定属于该类。在类定义体外定义成员函数时,必须在函数名前加上类名和“:”,“:”是作用域限定符(也称作用域运算符),用它声明成员函数是属于哪个类。如Cat:mew()表示mew函数的作用域是Cat,也就是说mew函数属于Cat。 如何选择成员函数的定义位置

14、呢?如果成员函数的函数体不超过3行,则可以将其写入类定义体;函数体超过3行的成员函数可以写在类定义体外。这样可以使类定义体条理清晰。,2. 常成员函数 类的成员变量被封装在类中,有时候不允许成员变量被随意修改。前面章节中我们使用const来保护变量,在类中我们也可以使用const来保护成员变量不被成员函数修改。具体做法是在成员函数的参数表后面加一个const,这种成员函数被称为常成员函数。如: float read Weight () const; /通过该函数读取weight,但不能改变任何成员变量 int read Age() const; /通过该函数读取age,但不能改变任何成员变量,使用常成员函数可以保证成员变量的安全,因为在这种成员函数中任何修改成员变量的语句都会被编译器发现。例如我们在例3.4中增加一个成员函数,并试图修改成员变量的值: int read Age() const weight=weight+1; /试图修改weight的值 return age; 编译时会发生如下错误提示: error C2166: l-value specifies const object,3.1.4 类成员的访问控制 在面向对象思想中类具有封装性,说的是类对外界表现得有些“独立”,不能把自己的所有特性暴露给外界,但又不能对外界隐藏所有特

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号