Presentation is loading. Please wait.

Presentation is loading. Please wait.

C++面向对象程序设计 谭浩强编著 授课教师:姬广永 QQ:41588872 学习网站:http://www.xin126.cn.

Similar presentations


Presentation on theme: "C++面向对象程序设计 谭浩强编著 授课教师:姬广永 QQ:41588872 学习网站:http://www.xin126.cn."— Presentation transcript:

1 C++面向对象程序设计 谭浩强编著 授课教师:姬广永 QQ: 学习网站:

2 面向对象程序设计 第二章 类和对象

3 1.编程语言的几个发展阶段 面向机器语言 汇编语言 面向过程语言:把代码组成过程或函数 结构化程序设计语言:仍然为面向过程语言
面向对象语言:引入类

4 面向对象的语言 主要的面向对象语言 C++ Smalltalk Eiffel CLOS Java

5 面向对象的语言 最早的面向对象的编程语言是1966年推出的Simlula,它首次提出模拟人类的思维方式,把数据和相关的操作集成在一起的思想。
20世纪80年代末期,以C++为代表的面向对象程序设计(OOP)才流行起来。 Java是20世纪90年代新出现的面向对象的编程语言,它去除C++中非面向对象的内容,并实现一次编写,多次使用的跨平台特点,是面向对象开发工具中最具潜力的成员之一。

6 图1-1 软件开发瀑布模型 (软件生命周期)

7 图1-2 极限编程过程模型

8 敏捷开发 极限编程的思想能够适应客户需求的快速变化,激发开发者的热情。
2001年,17名编程大师分别代表极限编程、水晶方法、实用编程等开发流派,发表“敏捷软件开发”宣言。 敏捷软件开发是一个开发软件的管理新模式,用来替代以文件驱动开发的瀑布开发模式。 敏捷开发会造成软件继承性的下降,因此它不是软件开发的终极选择。对于长时间、人数众多的大型软件应用的开发,文档的管理与衔接作用还是不可替代的。

9 面向对象的方法 二十世纪七十年代发展起来的 结构化编程的解决方案 模拟人类的思维过程 面向对象分析 (OOA) 面向对象设计 (OOD)
面向对象的实现 (OOI )

10 面向对象的方法 现实世界中所有的事物都是对象 对象都具有某些特征,并展现某些行为

11 对象 车型:法拉利 颜色:红色 年份:1995 活动 发动 停车 加速

12 面向对象的方法 公司中的不同部门都是对象 人事 会计 销售

13 将组织中的部门视为对象 Sales Personnel Accounts 每个部门的员工可对该部门的数据进行控制和操作

14 面向对象的编程 将活动和属性与每一实体相关联 每个部门的员工可对该部门的数据进行控制和操作 活动 属性 计算工资 员工详细资料 支付工资
支付帐单 记帐 银行交易 属性 员工详细资料 工资结算表 票据 凭证 收据 会计 每个部门的员工可对该部门的数据进行控制和操作

15 对象 每个对象都有它自己的特性或特征,描述它是 什么或它做什么。 交通监视应用程序中的车辆 菜单 鼠标和键盘 人事文件 有关某次考试的分数表
菜单 鼠标和键盘 人事文件 有关某次考试的分数表 时间 复数

16 对象 表示现实世界中的实体。 把众多对象分类是人类认识客观世界常采用的办法,分类的原则是抽象。即忽略事物非本质特征,找出事物的共性。

17 类:相似对象的集合 这些对象拥有相同特性、共同的行为。 术语“类”是“对象的类”的缩略形式。 例如:人类、动物类、过程类

18 多边形对象 多边形类 属性 顶点 边 填充颜色 抽象为 方法 绘制 擦除 移动

19 类 对象 类与对象 类是具有共同属性和行为的对象的抽象。 类可以定义为数据和方法的集合。 类也称为模板,因为它们提供了对象的基本框架。
封装的实体=数据+方法 数据或变量 类是具有共同属性和行为的对象的抽象。 类可以定义为数据和方法的集合。 类也称为模板,因为它们提供了对象的基本框架。 方法 实例化 抽象 属性或状态 对象 操作或行为

20 属性 每个对象称为它的类的实例 任何一个对象都应当具有这两个要素,一是属性(attribute);二是行为(behavior),即能根据外界给的信息进行相应的操作。对象是由一组属性和一组行为构成的。 当对象在类中表示时,对象拥有的特征称为属性。 在多边形类中:顶点、边、填充颜色 都是属性

21 方法 当对象(或实体)在类中表示时,对象或实体 拥有的动作称为方法
在多边形类中,“draw”,“erase”和 “move”都是方法的示例,它们是类的一部 分

22 面向对象的编程 面向对象编程的基本思想是: 从现实世界中客观存在的事物出发来构造 软件系统,并尽可能的运用人类自然的思 维方式。

23 面向对象程序设计方法的优点 可重用性 可扩展性 可管理性
可重用性是面向对象软件开发的一个核心思路,面向对象程序设计的抽象、封装、继承、多态四大特点都围绕这个核心服务。 可扩展性 可管理性

24 2.2类的定义 类的实现包括类声明和类体 3.4.1 类声明 class Student { …… };
class 定义类的关键字。(注意不要把class写成Class)。 Student 类的名称,习惯上,类名的首字母大写,并且命名的规则符合标识符的规则。

25 类体 在定义类时,只是定义了一种导出的数据类型,并不为类分配存储空间,所以,在定义类中的数据成员时,不能对其初始化。如:
class Test { int x=5,y=6; //是不允许的 extern float x; //是不允许的 } 类中的任何成员数据均不能使用关键字extern,auto或register限定其存储类型。

26 类体 class Student{ public: int num; string name;
类体包含数据(主要是变量)的定义和方法的定义。在类体中只可以有定义数据、定义方法的语句,而不能有其他的语句,如控制语句、赋值语句等。 class <class name> { 属性; 方法; } class Student{ public: int num; string name; void setName(string newName) { name=newName; } };

27 对象 只有在定义了属于类的变量后,系统才会为类的变量分配空间。 类的变量我们称之为对象。
在定义类时,只是定义了一种数据类型,并不为类分配存储空间。 只有在定义了属于类的变量后,系统才会为类的变量分配空间。 类的变量我们称之为对象。

28 对象的定义格式: 类名 对象1,对象2《,......》; Student st1,st2; 类名 对象名
类名 对象1,对象2《,......》; Student st1,st2; 类名 对象名 在建立对象时,只为对象分配用于保存数据成员的内存空间,而成员函数的代码为该类的每一个对象所共享。

29 对象的定义方法同结构体定义变量的方法一样
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; } 定义局部对象

30 对象的使用 一个对象的成员就是该对象的类所定义的成员,有成员数据和成员函数,引用时同结构体变量类似,用“.”运算符。

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; } }; void main(void) { A a1,a2; m=20; n=10; Setxy(2.0, 5.0); Print(); } void main(void) { A a1,a2; a1.m=20; a1.n=10; a1.Setxy(2.0, 5.0); a1.Print(); } 不能直接调用 用对象名调用

32 类体的区域称为类作用域。类的成员函数与成员数据,其作用域都是属于类的作用域,仅在该类的范围内有效,故不能在主函数中直接通过函数名和成员名来调用函数。

33 定义People类 思考: 人有 哪些属性 哪些行为

34 定义People类 float hight,weight; string head,ear,mouth;
#include<iostream> #include<string> using namespace std; class people { public: float hight,weight; string head,ear,mouth; void speak(string s) { cout<<s; } };

35 zhubajie.weight=200.0f; zhubajie.speak("师傅,咱们别去西天了,改去月宫吧"); int main()
{ people zhubajie; zhubajie.weight=200.0f; zhubajie.hight=1.70f; zhubajie.head="大头"; zhubajie.ear="两只大耳朵"; zhubajie.mouth="一只大嘴"; cout<<"重量:"<<zhubajie.weight<<"身高"<<zhubajie.hight<<endl; cout<<"猪八戒的头:"<<zhubajie.head<<"嘴:"<<zhubajie.mouth<<"耳朵:"<<zhubajie.ear<<endl; zhubajie.speak("师傅,咱们别去西天了,改去月宫吧"); }

36 类的定义格式: class 类名 { private : 成员数据; 成员函数; public : protected: };
class Student { private : char Name[20]; float Math; float Chiese; public : float average; void SetName(char *name); void SetMath(float math); void SetChinese(float ch); float GetAverage(void); }; 类的定义格式: class 类名 { private : 成员数据; 成员函数; public : protected: }; 类名 关键字 私有 公有 保护 分号不能少

37 用关键字public限定的成员称为公有成员
公有成员的数据或函数不受类的限制,可以在类内或类外自由使用; 对类而言是透明的。

38 class Student{ public: int num; string name; }; int main() { Student stu1; stu1.name="张三"; stu1.num= ; cout<<"学生的学号:"<<stu1.num<<",姓名:"<<stu1.name; }

39 用关键字priviate限定的成员称为私有成员
对私有成员限定在该类的内部使用,即只允许该类中的成员函数使用私有的成员数据 对于私有的成员函数,只能被该类内的成员函数调用; 类就相当于私有成员的作用域。

40 cout<<"学生的学号:"<<stu1.num<<",姓名:"<<stu1.name; }
class Student{ private: int num; string name; }; int main() { Student stu1; stu1.name="张三"; stu1.num= ; cout<<"学生的学号:"<<stu1.num<<",姓名:"<<stu1.name; } 'name' : cannot access private member declared in class 'Student'

41 class Student{ private: string name; public:string setName(string newName) { name=newName; return name; } }; int main() { Student stu1; string name1; name1=stu1.setName("张三"); cout<<"姓名:"<<name1; }

42 class Student{ private: string name; string setName(string newName) { name=newName; return name; } }; int main() { Student stu1; string name1; name1=stu1.setName("张三"); cout<<"姓名:"<<name1; }

43 而用关键字protected所限定的成员称为保护成员,只允许在类内及该类的派生类中使用保护的数据或函数。即保护成员的作用域是该类及该类的派生类。

44 私有成员 公有成员 保护成员 类内函数 可以调用 不可调用 私有函数 公有函数 保护函数 类内函数 可以调用 不可调用 派生类函数
类(非派生类)外函数 不可调用 派生类函数 私有函数 公有函数 保护函数 类内函数 可以调用 类(非派生类)外函数 不可调用 派生类函数

45 每一个限制词(private等)在类体中可使用多次。一旦使用了限制词,该限制词一直有效,直到下一个限制词开始为止。

46 class Student { char Name[20]; float Math; float Chiese; public : float average; void SetName(char *name); void SetMath(float math); void SetChinese(float ch); float GetAverage(void); }; 均为私有权限 均为公有权限

47 用成员选择运算符“.”只能访问对象的公有成员,而不能访问对象的私有成员或保护成员。若要访问对象的私有的数据成员,只能通过对象的公有成员函数来获取。

48 在类外不能直接使用 x 或 y ,必须通过Setxy()给 x 或 y 赋值,通过Print()输出 x 或 y 。
class A { float x, y; public: void Setxy(float a,float b) { x=a; y=b; } void Print(void) { cout<<x<<‘\t’<<y<<endl; } }; A x y Setxy() Print() 私有数据 公有函数 在类外不能直接使用 x 或 y ,必须通过Setxy()给 x 或 y 赋值,通过Print()输出 x 或 y 。

49 输出: 2 5 x y m n Setxy() Print() x y m n Setxy() Print() a1 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; } }; 2.0 5.0 10 20 void main(void) { A a1,a2; //定义对象 a1.m=10; a1.n=20; //为公有成员数据赋值 a1.Setxy(2.0 , 5.0); //为私有成员数据赋值 a1.Print(); } Print() Setxy() a2 n m y x 输出:

50 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; } }; 必须通过类内公有函数访问私有数据成员 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(); } 非法,私有成员不能在类外访问

51 利用函数访问私有数据成员 class Test{ int x,y; public:
void Setxy(int a, int b) {x=a; y=b;} int Getx(void) { return x;} //返回x值 int Gety(void) { return y;} //返回y值 }; void main(void) { Test p1,p2; p1.Setxy(3,5); int a,b; a=p1.Getx( ); b=p1.Gety(); //将 a=x, b=y cout<<a<<'\t'<<b<<endl; }


Download ppt "C++面向对象程序设计 谭浩强编著 授课教师:姬广永 QQ:41588872 学习网站:http://www.xin126.cn."

Similar presentations


Ads by Google