C++面向对象程序设计(下)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
保护 void SetName(char *name); void SetMath(float math); void SetChinese(float ch); float GetAverage(void); 分号不能少
2013-8-4
};
11
用关键字priviate限定的成员称为私有成员,
对私有成员限定在该类的内部使用,即只
2013-8-4
21
在定义一个类时,要注意如下几点: 1、类具有封装性,并且类只是定义了一种结构(样板), 所以类中的任何成员数据均不能使用关键字extern,auto 或register限定其存储类型。 2、在定义类时,只是定义了一种导出的数据类型,并不 为类分配存储空间,所以,在定义类中的数据成员时, 不能对其初始化。如: class Test { int x=5,y=6; //是不允许的 extern float x; //是不允许的 }
输出: 2
2013-8-4
5
Setxy()
Print()
29
用成员选择运算符“.”只能访问对象的公有
成员,而不能访问对象的私有成员或保护成 员。若要访问对象的私有的数据成员,只能 通过对象的公有成员函数来获取。
2013-8-4
30
class A { float x,y; public: 必须通过类内公有函数访问私有数 float m,n; void Setxy( float a, float b ){ 据成员 y=b; } x=a; void Print(void) { cout<<x<<„\t‟<<y<<endl; } };
2013-8-4 6
在面向过程的结构化程序设计中,人们常使 用这样的公式来表述程序∶
程序=算法+数据结构
2013-8-4
7
面向对象的程序组成:
对象 = 算法 + 数据结构 程序=(对象+对象+对象+……)+ 消息 消息的作用就是对对象的控制。 程序设计的关键是设计好每一个对象以及确 定向这些对象发出的命令,使各对象完成相 应的操作。
公有函数
在类外不能直接使用 x 或 y ,必须通过Setxy()给 x 或 y 赋值,通过Print()输出 x 或 y 。
2013-8-4 18
成员函数与成员数据的定义不分先后,可以先说 明函数原型,再在类体外定义函数体。
class A { float x, y; public: void Setxy(float a,float b) { x=a; y=b; } void Print(void) 在类体内定义成员函 { cout<<x<<„\t‟<<y<<endl; 数 } };
成员,只允许在类内及该类的派生类中使用 保护的数据或函数。即保护成员的作用域是 该类及该类的派生类。
2013-8-4
14
私有成员 公有成员 保护成员 类内函数 可以调用 可以调用 可以调用 类外函数 不可调用 可以调用 不可调用
私有函数 公有函数 类内函数 可以调用 可以调用 类外函数 不可调用 可以调用
2013-8-4 3
我们可以对一个对象进行封装处理,把它的 一部分属性和功能对外界屏蔽,也就是说从 外界是看不到的、甚至是不可知的。 使用对象的人完全可以不必知道对象内部的 具体细节,只需了解其外部功能即可自如地 操作对象。 把对象的内部实现和外部行为分隔开来。
2013-8-4 4
传统的面向过程程序设计是围绕功能进行的,用 一个函数实现一个功能。所有的数据都是公用的, 一个函数可以使用任何一组数据,而一组数据又 能被多个函数所使用。程序设计者必须考虑每一 个细节,什么时候对什么数据进行操作 。 面向对象程序设计采取的是另外一种思路。它面 对的是一个个对象。实际上,每一组数据都是有 特定的用途的,是某种操作的对象。也就是说, 一组操作调用一组数据。
面向对象的程序设计
第九章Байду номын сангаас
类和对象
2013-8-4
1
按钮对象: 按钮的内容、大小,按钮的字体、图案等等 针对按钮的各种操作,创建、单击、双击、拖动 等
班级对象: 班级的静态特征,所属的系和专业、班级的人数, 所在的教室等。这种静态特征称为属性; 班级的动态特征,如学习、开会、体育比赛等, 这种动态特征称为行为。
2013-8-4
22
在C++语言中,结构体类型只是类的一个特 例。结构体类型与类的唯一的区别在于:在 类中,其成员的缺省的存取权限是私有的;
而在结构体类型中,其成员的缺省的存取权
限是公有的。
2013-8-4
23
内联成员函数 当我们定义一个类时,可以在类中直接定义函数体。这时成员函 数在编译时是作为内联函数来实现的。
定义局部对象
27
} 2013-8-4
对象的使用 一个对象的成员就是该对象的类所定义的成员,
有成员数据和成员函数,引用时同结构体变量类
似,用“.”运算符。
2013-8-4
28
class A { float x,y; public: float m,n; void Setxy( float a, float b ){ x=a; y=b; } void Print(void) { cout<<x<<„\t‟<<y<<endl; } };
2013-8-4
19
class A { float x, y; 在类体内说明成员函数 public: 原型 void Setxy(float a,float b); void Print(void); };
void A::Setxy(float a,float b) 在类体外定义成员 { x=a; y=b; } 函数 void A::Print(void) { cout<<x<<„\t‟<<y<<endl; }
a1
x y m n
2.0
5.0 10 20
Setxy() Print()
void main(void) { A a1,a2; //定义对象 a1.m=10; a1.n=20; //为公有成员数据赋值 a1.Setxy(2.0 , 5.0); //为私有成员数据赋值 a1.Print(); }
a2
x y m n
对象的定义格式: 《存储类型》类名 对象1,对象2《,......》; Student st1,st2;
类名 对象名
在建立对象时,只为对象分配用于保存数据成员的内存空
间,而成员函数的代码为该类的每一个对象所共享。
2013-8-4 26
对象的定义方法同结构体定义变量的方法一样, 也分三种,当类中有数据成员的访问权限为私有 时,不允许对对象进行初始化。
void main(void) { A a1,a2; a1.m=10; a1.n=20; //为公有成员数据赋值 a1.x=2; a1.y=5; a1.Setxy(2.0,5.0); a1.Print(); 非法,私有成员不能在类外 }
访问
2013-8-4
31
同类型的对象之间可以整体赋值,这种赋值与对象的成员的访问 权限无关。 class A { float x,y; public: float m,n; void Setxy( float a, float b ){ x=a; y=b; } void Print(void) { cout<<x<<„\t‟<<y<<endl; } };
class A { float x,y; public: void Setxy( float a, float b ){ x=a; y=b; } void Print(void) { cout<<x<<„\t‟<<y<<endl; } } a1,a2;
定义全局对象
void main(void) { A a3,a4;
2013-8-4
8
每一个实体都是对象。有一些对象是具有相 同的结构和特性的。
每个对象都属于一个特定的类型。
在C++中对象的类型称为类(class)。类代表 了某一批对象的共性和特征。类是对象的抽 象,而对象是类的具体实例(instance)。
2013-8-4
9
类的定义
类是一种复杂的数据类型,它是将不同类型
2013-8-4
2
任何一个对象都应当具有这两个要素,一是属性 (attribute);二是行为(behavior),即能根据外界给 的信息进行相应的操作。对象是由一组属性和一 组行为构成的。
面向对象的程序设计采用了以上人们所熟悉的这 种思路。使用面向对象的程序设计方法设计一个 复杂的软件系统时,首要的问题是确定该系统是 由哪些对象组成的,并且设计这些对象。在C++中, 每个对象都是由数据和函数(即操作代码)这两部分 组成的。
2013-8-4 20
在类体外定义成员函数的格式:
<type> < class_name > :: < func_name > (<参数表>) { ...... //函数体 }
类名
函数名 形参列表
函数类型
void A::Setxy(float a,float b) { x=a; y=b; }
函数体
均为公有权限
2013-8-4
17
class A { float x, y; public:
私有数据
A
x
y Setxy() Print()
void Setxy(float a,float b)
{ x=a; y=b; } void Print(void) { cout<<x<<„\t‟<<y<<endl; } };
2013-8-4 5
程序设计者的任务包括两个方面:一是 设计所需的各种类和对象,即决定把哪些数 据和操作封装在一起;二是考虑怎样向有关 对象发送消息,以完成所需的任务。各个对 象的操作完成了,整体任务也就完成了。 因此人们设想把相关的数据和操作放在 一起,形成一个整体,与外界相对分隔。这 就是面向对象的程序设计中的对象。
的数据和与这些数据相关的运算封装在一起
的 集合体。 类将一些数据及与数据相关的函数封装在一
起,使类中的数据得到很好的“保护”。在
大型程序中不会被随意修改。
2013-8-4 10
类的定义格式: class Student class 类名 { private : { private : 类名 成员数据; 关键字 char Name[20]; 成员函数; public : float Math; 成员数据; 私有 成员函数; float Chinese; protected: 成员数据; 成员函数; public : 公有 }; float average;
2013-8-4
24
对象 在定义类时,只是定义了一种数据类型,即说明程
序中可能会出现该类型的数据,并不为类分配存储
空间。 只有在定义了属于类的变量后,系统才会为类的 变量分配空间。 类的变量我们称之为对象。
对象是类的实例,定义对象之前,一定要先说明该
对象的类。
2013-8-4 25
不同对象占据内存中的不同区域,它们所保存的 数据各不相同,但对成员数据进行操作的成员函 数的程序代码均是一样的。
同时,我们也可以在类体外定义类的内联成员函数,在类体内说明
函数,在类体外定义时,在成员函数的定义前面加上关键字inline。
class A 说明该成员函数为内联 { float x, y; inline void A::Setxy(float a,float b) public: { x=a; y=b; } void Setxy(float a,float b); inline void A::Print(void) void Print(void); { cout<<x<<„\t‟<<y<<endl; } };
保护函数 可以调用 不可调用
2013-8-4
15
每一个限制词(private等)在类体中可使用多 直到下一个限制词开始为止。 如果未加说明,类中成员默认的访问权限是
private,即私有的。
次。一旦使用了限制词,该限制词一直有效,
2013-8-4
16
均为私有权限
class Student { char Name[20]; float Math; float Chinese; public : float average; void SetName(char *name); void SetMath(float math); void SetChinese(float ch); float GetAverage(void); };
允许该类中的成员函数使用私有的成员数
据,对于私有的成员函数,只能被该类内 的成员函数调用;类就相当于私有成员的 作用域。
2013-8-4
12
用关键字public限定的成员称为公有成员,
公有成员的数据或函数不受类的限制,可以
在类内或类外自由使用;对类而言是透明的。
2013-8-4
13
而用关键字protected所限定的成员称为保护
相关文档
最新文档