4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板

Slides:



Advertisements
Similar presentations
JAVA 编 程 技 术 主编 贾振华 2010年1月.
Advertisements

移动应用软件开发技术 第二讲:C++编程基础
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
四資二甲 第三週作業 物件導向程式設計.
第一章 面向对象程序设计.
第九讲 类与对象 (I)面向对象基础.
類別與物件 Class & Object.
第7单元 面向过程编程—— 继承与多态.
第八章 类和对象.
C++语言程序设计教程 第7章 类与对象 第7章 类与对象.
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
C++语言程序设计 第四章 类与对象 成都信息工程学院计算机系.
第四章 在 C# 中实现 OOP 概念.
Chap 18 類別與物件 夫有土者,有大物也。有大物者,不可以物。 物而不物,故能物物。 明乎物物者之非物也,豈獨治天下百姓而已哉!
CHAPTER 9 建構方法 ROBERT.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
哈夫曼编码.
第六章 继承性和派生类 胡昊 南京大学计算机系软件所.
STRUCTURE 授課:ANT 日期:2010/5/12.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
類別樣板 Class Template 類似函式樣板 由類別樣板產生的類別稱為類別樣版的實體(instance)
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
第三章 C++中的C 面向对象程序设计(C++).
第 6 章 函式.
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
C++语言程序设计教程 第7章 类与对象 第7章 类与对象.
并发机制 结果应该为: 线程 1: 1 线程 1: 2 线程 1: 3 线程 1: 4 线程 1: 5 线程 2: 6 线程 2: 7
第四章 小技巧.
类类型 C++支持的内置类型和操作,如 int i=10; i=i%6; i=i+4;
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
Ch02-基礎語法.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第16章 虛擬與多形 16-1 虛擬函數 16-2 純虛擬函數與抽象類別 16-3 多形 16-4 虛擬繼承與虛擬解構子.
10 多載函數 10.1 多載概論 多載一般函數 多載成員函數 10-3
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
第五章 递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第四章 类 4.1 基础知识 4.2 构造函数 4.3 方法 4.4 属性与索引 4.5 String类
第三章 数据抽象.
Object-Oriented Programming in C++ 第二章 类和对象
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
第二章 类型、对象、运算符和表达式.
C++程序设计基础 主讲人:谢昕 华东交通大学信息工程学院 第十~十二讲 多态性和虚函数 2005年春季学期.
Review 1~3.
第九章 物件導向-進階.
第1章 C++面向对象程序设计要点 1.1 函数和函数参数 1.2 输入输出   1.3 类 1.4 抽象类型和模板.
第 9 章 建構函式與解構函式.
挑戰C++程式語言 ──第9章 函數.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
本章主題 C++的程式結構 資料型態與宣告 算術運算 簡易的輸入輸出指令 程式編譯(Compile)的過程與原理.
Class 2005/05/25.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
變數與資料型態  綠園.
C++程序语言设计 Chapter 14: Templates.
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
安排座位.
第十二章 C与C C转入C++时不需改变的内容 12.2 C转入C++的一些与类无关的 新特性
Presentation transcript:

4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板 第4章 类与对象 4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板

4.1 概述 结构化程序设计方法的基本思想是:自顶向下,逐步求精;按功能划分为若干个模块,模块本身还可以再做适当分解,形成树状结构;模块是单入口和单出口的,内部都是由顺序、选择和循环三种基本控制结构组成。

面向过程的程序的缺点 可重用性和可扩充性较差,维护代价高,数据的安全性也往往得不到有效的控制。程序开发的效率难以提高,程序的规模受到限制,严重影响了软件产业的发展。

银行业务处理系统 1 typedef struct ACC { long acc_id; /*帐号*/ char name[30]; /*客户姓名*/ float bal_mon; /*帐户余额*/ float int_year; /*年利息*/ int acc_type; /*帐户类型(现金、支票或贷款)*/ }account;

问题 结构化程序设计方法是围绕实现处理功能的过程来构造系统的,然而用户需求的变化基本上是针对功能的。用户需求的变化往往造成系统结构的较大变化,从而需要花费很大代价,才能适应并实现这种变化。

假设根据业务发展的情况,需要增加公积金帐户,重新编写代码,修改对操作的处理过程,显然这会大大增加软件维护的代价。 如果银行开通网上银行业务,在编写操作过程的同时,由于要增加网络数据的处理,客户的银行帐户等相应的数据结构也必须随之调整,这又可能会对整个系统的操作带来新的影响。 由于对bal_mon数据项未做访问上的特别限制,使得帐户余额容易从外部被修改。

面向对象程序设计 面向对象程序设计的出发点和基本原则,是使开发软件的方法与过程尽可能接近人们认识世界解决问题的模式,也就是使描述问题的问题空间与解决问题的解空间,在结构上尽可能保持一致。 面向对象程序设计方法是一种以对象为核心,以数据为主线,把数据和处理相结合的方法。对象是由数据和允许施加在数据上的操作所构成的统一体,自身就是进行处理的主体。

面向对象程序设计方法对一些对象的共性加以抽象,形成类,每一个对象都属于一个特定的类。类定义了一组数据和一组方法,数据表达对象的状态信息,用于表示对象的静态属性;类中定义的方法,是允许施加于该类对象的操作,为该类对象所共享。

可以用一些简单类的对象构造出复杂的类,或者在原有类的基础上,派生出一个新的类。派生的类除了具有原有类的属性和行为之外,还可以添加新的属性和行为; 对原有类的某些行为,也可以重新进行描述,有自己独特的表现形式,即多态性。

银行业务处理系统 2 class account { public: void acc_dep(float m); //存款 float acc_wit(float m); //取款 bool acc_tra(account &p, float m); //转帐 private: long acc_id; //帐号 char name[30]; //客户姓名 float bal_mon; //帐户余额 float int_year; //年利息 };

面向对象=对象+类+消息+继承+多态性 1.对象 对象是构成系统的基本单位。对象由属性和行为组成,属性表示对象的性质,用来描述对象静态特征的数据项,属性值则规定了对象所有可能的状态,对象的行为是用来描述对象动态特征的操作序列。

2.类 类是具有相同的属性和行为的一组对象的集合,是建立对象时使用的模板,对象就是类的实例。 3.消息 对象之间的这种联系和作用是通过消息来完成的。消息就是要求某个对象执行某种操作的规格说明,通常由以下3个部分组成:接收消息的对象名、消息名和消息参数。

4.继承 类之间的继承关系是对现实世界中遗传关系的模拟,表示类之间的内在联系以及对属性和行为的共享,即派生类可以自动沿用基类的某些特征。 5.多态性 多态性是指在基类中定义的行为,被派生类继承之后,可以具有不同的表现形式。在面向对象程序设计方法中,类的多态性主要表现在,不同类的对象接收到同样的消息后,产生不同的行为方式。

4.2 类与对象的实现 class 类名 { public: 公有成员列表; protected: 保护成员列表; private: 私有成员列表; };

class和类名构成类的头部。class是关键字,用来定义类,类名一般不能省略。 {}包含类的主体,在其中定义类的成员。这些成员既可以是数据成员,描述类的属性(attribute);也可以是成员函数,描述类的方法(method)。 public、protected和private是关键字,后跟冒号(:),用于说明其下成员列表的访问控制属性。 }后的分号(;)表示类的定义结束,不可省略。

时钟类 class clock { public: void ShowTime(void);//显示时间 void SetTime(int h,int m,int s);//设置时间 private: int hour;//小时 int minute;//分钟 int second;//秒 };

数据成员 类型 数据成员名; C++语言不允许在类的主体中定义数据成员时,同时进行初始化。例如以下类的定义是非法的: class clock { …… private: int hour=0; //错误 };

成员函数 1.直接将函数定义在类的主体中。 class clock { …… public: void ShowTime(void)//显示时间 cout<<hour<<”:”<<minute<<”:”<<second<<endl; } };

2.在类的主体中给出函数原型(function prototype),然后在类的外部定义成员函数。 类型 类名::成员函数名(参数表) { … } 作用域运算符(::)指出该成员函数所属的类。

class clock { public: void ShowTime(void);//显示时间 …… }; void clock::ShowTime(void) cout<<hour<<”:”<<minute<<”:”<<second<<endl; }

访问控制属性 访问控制属性有公有类型(public)、私有类型(private)和保护类型(protected)。 公有类型的成员,其访问权限不受限制,既可以被类的其它成员访问,也可以被外部的对象或者函数访问。私有类型的成员只允许被类的其它成员访问,而不允许来自外部的访问。保护类型与私有类型相似,两者之间的差别主要体现在类的继承中。

对象 类名 对象名; 例如: clock s1,s2; 发送消息的语法形式是: 对象名.公有成员函数名(实参表);

4.3 对象的初始化和析构 C++语言提供了类的两个成员函数,它们分别是构造函数和析构函数,可以帮助用户自动完成对象的初始化和清理性工作。

构造函数 构造函数(constructor)是类所特有的成员函数,对象创建时自动被调用,完成对象的初始化工作。其语法形式为: 类名(参数表);

案例 class clock //时钟类的定义 { public: //公有成员函数 clock(int h=0, int m=0, int s=0);//构造函数 … }; clock::clock(int h, int m, int s) hour=h>=0&&h<24?h:0; minute=m>=0&&m<60?m:0; second=s>=0&&s<60?s:0; } clock s(10,30,30);//创建对象并初始化

说明 1.构造函数名与类名相同。 2.构造函数无返回值,不能把void写在构造函数名的前面,函数体中也不能出现return语句。 3.构造函数的访问控制属性必须是public。

拷贝构造函数 拷贝构造函数(copy constructor)是构造函数的特例,它的作用是自动用一个已经存在的同类对象,去初始化另一个新的对象。 语法形式为: 类名(类名 &对象名);

案例 clock::clock(clock &p) { hour=p.hour; minute=p.minute; second=p.second; } … clock s(10,30,30);//创建对象s,构造函数被调用 clock t(s);//创建对象t,拷贝构造函数被调用

拷贝构造函数调用的时机 (1)创建对象时,用一个已存在的对象初始化该类另一个新对象。 (2)函数的形参是对象,函数调用时,发生形实结合,用实参对象复制形参对象。 (3)函数返回值的类型是类,函数调用结束,返回一个对象。

析构函数(destructor),这是类的一个特殊的成员函数,在对象消亡前自动被调用,完成清理性工作。 其语法形式为: ~类名();

clock::~clock() { cout<<”对象即将消亡”<<endl; } 1.析构函数名是在类名前加~(按位取反符),表示它与构造函数的作用正好相反。 2.析构函数没有返回值,没有参数,也不允许重载,即一个类仅有一个析构函数。

4.4 类的包含 类包含了其它类的对象作为自己的数据成员,包含了对象成员的类称为组合类。 class circle { … private: point p;//对象成员 };

组合类的初始化 类名::类名(参数总表):对象成员1(参数表),对象成员2(参数表)… { … }

说明 初始化时,先按照对象成员在组合类中定义的顺序,依次调用对象成员的构造函数,最后调用组合类的构造函数。 析构函数的调用顺序与构造函数正好相反。

4.5 类模板 类模板允许为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数或者返回值,能取任意数据类型。任意数据类型包括基本数据类型,以及用户自定义的构造类型等。

语法形式 template <class 类型参数1,class 类型参数2…> class 类名 { … };

说明 1.类模板中数据成员的类型、成员函数参数的类型以及返回值的类型,可以是模板参数表中的类型参数。 2.定义类模板的成员函数时,也必须加上模板参数表,与函数模板的形式类似。例如: template <class T> T A <T>:: fun1(T x) { … }

类模板代表着一个类的集合。在使用时给出模板实参表,由类模板生成一个实际的模板类,再创建对象。其语法形式为: 类名 <模板实参表> 对象1,对象2… 例如: A <int> b1,b2… C++将模板实参表中的参数,与类模板定义时模板参数表中的参数一一对应,生成一个模板类,然后创建该类的对象。