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

Slides:



Advertisements
Similar presentations
网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
Advertisements

7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第四章 类与对象.
第四章 类、对象和接口.
四資二甲 第三週作業 物件導向程式設計.
计算机可视化编程 基于Visual C++6.0的面向对象编程 第 四 讲 主讲教师:隋振                学时:32.
第14章 c++中的代码重用.
第八章 类和对象.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
Using C++ The Weird Way Something about c++11 & OOP tricks
类和对象 潘荣江 山东大学计算机科学与技术学院
第九章 结构体 主讲教师 :贾月乐 电话:
面向对象建模技术 软件工程系 林 琳.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
授课老师:龚涛 信息科学与技术学院 2018年4月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第11讲 类的继承 1. 类的继承的概念 2. 类的单继承机制 3. 单继承中的构造函数和析构函数.
第12讲 多继承与虚基类 多继承 虚基类.
管理信息结构SMI.
走进编程 程序的顺序结构(二).
辅导课程六.
第9讲 类与对象 9.1 面向对象程序设计的基本概念 9.2 对象与类的定义 9.3 内联函数 9.4 对象的使用.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
面向对象程序设计 QQ群: Object-Oriented Programming 汽车学院.
第二章 Java语言基础.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第七章 操作符重载 胡昊 南京大学计算机系软件所.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++面向对象程序设计 谭浩强编著 授课教师:姬广永 QQ: 学习网站:
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第11讲 类的继承 1. 类的继承的概念 2. 类的单继承机制 3. 单继承中的构造函数和析构函数.
$9 泛型基础.
C++复习3 ----类的继承与派生.
C#面向对象程序设计 $6 深入理解类.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第10讲 构造函数和析构函数 构造函数 析构函数 This 指针.
物件導向程式設計 CH2.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
第九节 赋值运算符和赋值表达式.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
辅导课程十五.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二节 C语言的特点.
本节内容 结构体.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
JAVA 程式設計與資料結構 第三章 物件的設計.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
變數與資料型態  綠園.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
安排座位.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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(); } 不能直接调用 用对象名调用

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

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

定义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; } };

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("师傅,咱们别去西天了,改去月宫吧"); }

类的定义格式: 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: }; 类名 关键字 私有 公有 保护 分号不能少

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

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

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

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

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; }

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

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

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

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

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); }; 均为私有权限 均为公有权限

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

在类外不能直接使用 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 。

输出: 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 输出: 2 5

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(); } 非法,私有成员不能在类外访问

利用函数访问私有数据成员 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; }