第9章 类和对象

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

28
例9.1 最简单的例子
#include <iostream> using namespace std; class Time //定义Time类 { public: //数据成员为公用的 int hour; int minute; int sec; }; int main( ) { Time t1; //定义t1为Time类对象 cin>>t1.hour; //输入设定的时间 cin>>t1.minute; cin>>t1.sec; cout<<t1.hour<<″:″<<t1.minute<<″:″<<t1.sec<<endl; //输出时间 return 0; }
的,它能大大降低程序设计人员的工作难度,减少出错机
会。
13
类和对象的作用
类是C++实现面向对象程序设计的基础; 基于对象的程序是以类和对象为基础的,程 序的操作是围绕对象进行的; 基于对象程序设计所面对的是一个个对象, 所有的数据分别属于不同的对象;
14
9.2 类的声明和对象的定义
类和对象的关系:
任何一个对象都应当具有 这两个要素,即属性 (attribute)和行为 (behavior) 对象之间通过发送 和接收ห้องสมุดไป่ตู้息互相联系
4
C++中的对象
C++语言中,对象的 属性抽象为数据, 对象的行为抽象为 函数; 每个对象都是由数 据和函数(即操作代 码) 两部分组成。
5
数据体现了前面提到的“属性”。如一个三角形 对象,它的3个边长就是它的属性。 函数是用来对数据进行操作的,以便实现某些功 能(即行为)。例如可以通过边长计算出三角形的面 积等,计算三角形面积就是前面提到的行为,在 程序设计中也称为方法(method)。 调用对象中的函数就是向该对象传送一个消息 (message),要求该对象实现某一行为(功能)。
12
面向对象程序设计的特点
面向对象程序设计面对的是一个个对象。其中每一组数据 都是有特定的用途的,是某种操作的对象。也就是说,一
组操作调用一组数据。
程序设计者的任务包括: 一是设计所需的各种类和对象, 即决定把哪些数据和操作封装在一起;二是考虑怎样向有 关对象发送消息,以完成所需的任务。 对一个大型任务来说,面向对象程序设计方法是十分有效
6
抽 象
抽象就是将有关事物的共性归纳、集中的过程。 抽象的作用是表示同一类事物的本质。 对象是具体存在的,类是对象的抽象;对象则是 类的特例,或者说对象是类的具体表现形式。 如:一个三角形可以作为一个对象,10个不同尺 寸的三角形是10个对象。如果这10个三角形对 象有相同的属性和行为,可以将它们抽象为一种 类型,称为三角形类型。在C++中,这种类型就 称为“类(class)”。这10个三角形就是属于同一 “类”的对象。
例如:struct Student { int num; char name[10]; float score; } Student stu1,stu2; 结构体变量所占存储空间的大小为其所有数据成员占用存 储空间之和。
21
9.3 类的成员函数
类的成员函数性质 1. 类的成员函数(简称类函数)是函数的一种,有返 回值和函数类型 2. 与一般函数的区别是: 属于一个类的成员,出现 在类体中。它可以被指定为private(私有的)、 public(公用的)或protected(受保护的)
25
通过对象名和成员运算符访问对象中的成员
stud1.num=1001; //假设num已定义为公用的整型数据成员 stud1.display( ); //调用对象stud1的公用成员函数
只能访问public成员,而不能访问private成员
26
通过指向对象的指针访问对象中的成员
class Time { public: int hour; int minute; }; Time t,*p; p=&t; cout<<p->hour; //数据成员是公用的
7
面向对象的程序设计的三大特性
封装性 继承性 多态性(重载)
8
封装性
对一个对象进行封装处理,把它的一部分属性和功 能对外界屏蔽,也就是说从外界是看不到的,甚至是不 可知的。其好处是大大降低了操作对象的复杂程度。 封装:一是将有关的数据和操作代码封装在一个对 象中,形成一个基本单位,各个对象之间相对独立, 互不干扰。二是将对象中某些部分对外隐蔽,即隐蔽 其内部细节,只留下少量接口,以便与外界联系,接 收外界的消息。 这种对外界隐蔽的做法称为信息隐蔽(information hiding)。信息隐蔽还有利于数据安全,防止无关的人 了解和修改数据。
class Student { public: void display( ) { cout<<″num:″<<num<<endl; cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl; } private: int num; char name[20]; char sex; }stud1,stud2;
10
多态性

所谓多态性(polymorphism)是指由继承而 产生的相关但不相同的类,其对象对同一 消息会作出不同的响应。
如:上课铃响,同学要回到自己的座位上准
备听课,而老师则要走上讲台准备讲课。
多态性是面向对象程序设计的一个重要特
征,能增加程序的灵活性。
11
面向对象程序设计的特点
传统的面向过程程序 设计是围绕功能进行 的,用一个函数实现 一个功能。 所有的数据都是公用 的,一个函数可以使 用任何一组数据,而 一组数据又能被多个 函数所使用。
2
9.1 面向对象程序设计方法概述
当生产汽车时,分别设计和制造发动机、底盘、车身 和轮子,最后把它们组装在一起。在组装时,各部分 之间有一定的联系,以便协调工作
——面向对象的程序设计的基本思路
3
对 象
客观世界中任何一个事物 都可以看成一个对象 (object):国家、城市、 学校、院系、班级、老师、 学生、教室、桌子、椅 子… …
9
继承性
“白马”继承了“马”的基本特征,又增加 了新的特征(颜色),“马”是父类,或称为基 类,“白马”是从“马”派生出来的,称为子 类或派生类; C++提供了继承机制,采用继承的方法可以很 方便地利用一个已有的类建立一个新的类。 —— “软件重用”(software reusability)就是基于 这种思想。
从访问权限上分有以下三类:
public:该成员可以被程序中的任何代码访问; private:只能被类本身成员函数及友元类的成员函数访问 protected:只能被类本身的成员函数、友元类的成员函数 和该类的派生类的成员访问。
类的成员从访问权限默认为private权限
成员函数可以在类体中定义,也可在类体外定义,在类体 外定义成员函数时,必须先在类体中作函数的原型说明
在C++中对象的类型称为类(class) 类是对象的抽象,而对象是类的具 体实例(instance)。
在C++中是先声明一个类类型,然后用它去定义若干个同 类型的对象; 类是抽象的概念,不占用内存,而对象是具体的个体,占 用存储空间。
15
类类型声明
如果程序中要用到类类型,必须自己根据需 要进行声明,或者使用别人已设计好的类; class Student { private: int num; char name[20]; char sex; public: void display( ) { cout<<″num:″<<num<<endl; cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl; } }; Student stud1,stud2;
19
方式三:不出现类名,直接定义对象
class //无类名 { private: //声明以下部分为私有的 ┆ public: //声明以下部分为公用的 ┆ }stud1,stud2;
20
类和结构体类型的异同
1. C++允许用struct来定义一个类型。可以将关键字class声明的 类类型改为用关键字struct; 2. 用struct声明的类,如果对其成员不作private或public的声明, 系统将其默认为public。
第9章
类和对象
1 2 3 4 5
面向对象程序设计方法概述
类的声明和对象的定义
类的成员函数
对象成员的引用
对象的初始化和释放
1
引 言
面向过程的程序设计: 把一个项目分成若干个小 的过程; 每个过程完成一个具体的 功能; 这些过程按顺序结合,实 现系统的整体要求。 不适合编写规模较大的程 序。 面向对象的程序设计: 将项目要处理的所有个体 看作一个一个的对象; 对象相对外界是独立的, 每个对象都具备两个要素: 属性和行为; 对象和外界通过消息发生 联系; 适合编写规模较大的程序。
如果在类的定义中既 不指定private,也不 指定public,则系统 就默认为是私有的; 用protected声明的成 员称为受保护的成员, 不能被类外访问,可 以被友元类、派生类 的成员函数访问。
16
定义类的说明:
class是定义类的关键字,类名是一个标识符,用于惟一标 识一个类,一般首字母大写 大括号内是类体(包含数据成员和函数成员),类的成员
22
在类外定义成员函数
class Student 作用域限定符,如: { public: ∷display( )或 void display( ); display( )则为普通 private: 函数 int num; string name; char sex; }; void Student∷display( ) { cout<<″num:″<<num<<endl; cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl; } Student stud1,stud2;
//定义对象t和指针变量p //使p指向对象t //输出p指向的对象中的成员hour
p->hour,(*p).hour和t.hour三者等价
27
通过对象的引用变量来访问对象中的成员
如果已声明了Time类,并有以下定义语句: Time t1; //定义对象t1 Time &t2=t1; //定义Time类引用变量t2,并使之初始化为t1 cout<<t2.hour; //输出对象t1中的成员hour
17
定义对象
方式一:先声明类类型,然后再定义对象
在C++中,声明了类类型后,定义对象有两种形式: (1) class 类名 对象名 如 class Student stud1,stud2; (2) 类名 对象名 如 Student stud1,stud2;
18
方式二:在声明类类型的同时定义对象
29
例9.2 引用多个对象的成员
#include <iostream> using namespace std;
class Time { public: int hour; int minute; int sec; };
30
int main( ) { Time t1; //定义对象t1 cin>>t1.hour; //向t1的数据成员输入数据 cin>>t1.minute; cin>>t1.sec; cout<<t1.hour<<″:″<<t1.minute<<″:″<<t1.sec<<endl; //输出t1中数据成员的值 Time t2; //定义对象t2 cin>>t2.hour; //向t2的数据成员输入数据 cin>>t2.minute; cin>>t2.sec; cout<<t2.hour<<″:″<<t2.minute<<″:″<<t2.sec<<endl; //输出t2中数据成员的值 return 0; }
23
成员函数的存储方式 正常方式
C++方式
每个对象所占用的存储空间是该对象的数据部分所占用的 存储空间,而不包括函数代码所占用的存储空间
24
9.4 对象成员的引用
访问对象中的成员可以有3种方法
通过对象名和成员运算符访问对象中的成员 通过指向对象的指针访问对象中的成员 通过对象的引用变量访问对象中的成员
相关文档
最新文档