面向对象程序设计5PPT教学课件
合集下载
第5章面向对象程序设计PPT课件
➢函数模板就是一系列相关函数定义的模型或样板,这些函数 的原代码除了所针对的数据类型不同而有所差异外,其基本结 构形式相同。
➢函数模板-------数据类型本身成了它的参数,因而是一种参数 化类型的函数。
5.2 函数模板
5.2.2 函数模板的使用与实例化
所有的函数模板都具有同样的基本格式: template<class T>或template<typename T> //模板声明 返回类型 函数名(参数表) {
5.2 函数模板
5.2.1 函数模板的定义
➢对于不同的数据类型,需要提供一种逻辑功能完全一样的函 数,即编制这些函数的程序代码完全一样,其区别仅仅是处理 的数据类型。
➢针对不同的数据类型,需要重载函数: 例如:求两数的最大值,不同的数值类型,程序逻辑相
同,程序代码相同,只是参数类型和返回值不同。
➢有一种更方便、更可靠的方法来完成这一功能。函数模板就 是为了适应这一要求而产生的。
5.1 模板的概念
➢ C++是一种“强制型”的语言,也就是说一个变 量,编译器必须确切地知道它的类型,而模板就 是构建在这个强类型语言基础上的泛型系统。
➢ 由模板可以得到一系列的相似类或相似函数,这 些相似类和相似函数涉及的数据其类型可能不同 但处理数据却具有相同的表现形态。
➢ C++模板包括函数模板和类模板。
//函数体的定义 } ➢template 关键字和尖括号中的class T 一起作为模板的构造 ➢每一个类型参数(上面语法形式中的T)之前都有关键字class 或 关键字typename,这些类型参数代表的是类型,可以是内部类型 或是自定义类型。 ➢类型参数就可以用来指定函数模板本身的形参类型和返回值类 型,以及声明函数中的局部变量。 ➢函数模板中函数的定义方式与定义其他函数类型类似。
➢函数模板-------数据类型本身成了它的参数,因而是一种参数 化类型的函数。
5.2 函数模板
5.2.2 函数模板的使用与实例化
所有的函数模板都具有同样的基本格式: template<class T>或template<typename T> //模板声明 返回类型 函数名(参数表) {
5.2 函数模板
5.2.1 函数模板的定义
➢对于不同的数据类型,需要提供一种逻辑功能完全一样的函 数,即编制这些函数的程序代码完全一样,其区别仅仅是处理 的数据类型。
➢针对不同的数据类型,需要重载函数: 例如:求两数的最大值,不同的数值类型,程序逻辑相
同,程序代码相同,只是参数类型和返回值不同。
➢有一种更方便、更可靠的方法来完成这一功能。函数模板就 是为了适应这一要求而产生的。
5.1 模板的概念
➢ C++是一种“强制型”的语言,也就是说一个变 量,编译器必须确切地知道它的类型,而模板就 是构建在这个强类型语言基础上的泛型系统。
➢ 由模板可以得到一系列的相似类或相似函数,这 些相似类和相似函数涉及的数据其类型可能不同 但处理数据却具有相同的表现形态。
➢ C++模板包括函数模板和类模板。
//函数体的定义 } ➢template 关键字和尖括号中的class T 一起作为模板的构造 ➢每一个类型参数(上面语法形式中的T)之前都有关键字class 或 关键字typename,这些类型参数代表的是类型,可以是内部类型 或是自定义类型。 ➢类型参数就可以用来指定函数模板本身的形参类型和返回值类 型,以及声明函数中的局部变量。 ➢函数模板中函数的定义方式与定义其他函数类型类似。
C 面向对象程序设计第5章教程PPT课件
class B: A {...};
A为私有派生 ➢ 但派生并不是简单的扩充,有可能改变派生类中的基类的
成员性质。
➢ 有三种派生方式:公有派生、保护派生、私有派生。
➢ 默认的是私有派生。
2021
11 11
5.2 三种继承的派生类的成员访问方式
从一个基类派生一个类的一般格式为:
class ClassName:<Access>BaseClassName
2021
22
5.1 派生和继承的相关概念和作用
class Student
{ int num;
char name[30];
char sex;
public:
void display( )
//对成员函数display的定义
{cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
第五章 继承和派生类
2021
11
5.1 派生和继承的相关概念和作用
继承性是面向对象程序设计中最重要的机制。这种 机制提供了无限重复利用程序资源的一种途径。 通过C++语言中的继承机制,可以扩充和完善旧的 程序设计以适应新的需求。 这样不仅可以节省程序开发的时间和资源,并且为 未来程序增添了新的资源。
cout<<"address: "<<addr<<endl;}
};
2021
44
5.1 派生和继承的相关概念和作用
利用原来定义的类Student作为基础,再加上新的 内容即可,以减少重复的工作量。 C++提供的继 承机制就是为了解决这个问题。 在C++中所谓“继承”就是在一个已存在的类的基 础上建立一个新的类。
教学课件面向对象程序设计文稿演示
2.汇编语言:主要由汇编指令构成,这些汇编指令与机器语言 的二进制指令一一对应。如加法运算:ADD。
注意:机器语言和汇编语言都是面向机器的程序设计语言, 它们与计算机的硬件紧密相关。
程序设计语言
3.高级语言:
FORTRAN语言和随后出现的BASIC语言、Pascal语言 、COBOL语言以及C语言等等,都被称为高级语言。
程序员在使用高级语言编写程序时,不需要熟悉计算 机的指令系统,可以将精力集中于解题思路和方法上 。如加法运算:+ 。
计算机不能直接执行高级语言程序,必须先翻译成为 机器语言程序之后才能执行。
程序设计方法
程序设计方法是独立于具体程序设计语言 的一门技术。由于程序设计通常离不开程 序设计语言作为工具,所以容易混淆程序 设计方法与程序设计语言的概念。
结构化的程序设计把程序的结构规定为顺序、选择和循环三种结构, 限制使用GOTO语句,并采用了自顶向下、逐步求精的分析和设计方 法,即功能分解法,这种方法将需求空间视为一个功能模块,该模块 又进行分解,生成多个小的功能模块,重复分解,直至每个模块具有 明确的功能和适当的复杂度,而每个模块的功能实现都由上述三种基 本结构组成,其目的是为了解决由许多人共同开发大型软件时,如何 高效率地完成高可靠系统的问题。
结构化的程序设计方法
在接受一个任务后应怎样着手进行呢?有两种不同的方法: 1. 一种是自顶向下,逐步细化。 2. 一种是自下而上,逐步积累。
以写文章为 例来说明这个问题: 有的人胸有全局,先想好整个文章分成哪几个部分,然后再进一步考 虑每一部分分成哪几节,每一节分成哪 几段,每一段应包含什么内容 ,用这种方法逐步分解,直到作者认为可以直接将各小段表达为文字 语句为止。这种方法就叫做 “自顶向下,逐步细化”。 另有些人写文章时不拟提纲,如同写信一样提起笔就写,想到哪里就 写到哪里,直到他认为把想写的内容都写出来了为止。 这种方法叫做 “自下而上,逐步积累”。
注意:机器语言和汇编语言都是面向机器的程序设计语言, 它们与计算机的硬件紧密相关。
程序设计语言
3.高级语言:
FORTRAN语言和随后出现的BASIC语言、Pascal语言 、COBOL语言以及C语言等等,都被称为高级语言。
程序员在使用高级语言编写程序时,不需要熟悉计算 机的指令系统,可以将精力集中于解题思路和方法上 。如加法运算:+ 。
计算机不能直接执行高级语言程序,必须先翻译成为 机器语言程序之后才能执行。
程序设计方法
程序设计方法是独立于具体程序设计语言 的一门技术。由于程序设计通常离不开程 序设计语言作为工具,所以容易混淆程序 设计方法与程序设计语言的概念。
结构化的程序设计把程序的结构规定为顺序、选择和循环三种结构, 限制使用GOTO语句,并采用了自顶向下、逐步求精的分析和设计方 法,即功能分解法,这种方法将需求空间视为一个功能模块,该模块 又进行分解,生成多个小的功能模块,重复分解,直至每个模块具有 明确的功能和适当的复杂度,而每个模块的功能实现都由上述三种基 本结构组成,其目的是为了解决由许多人共同开发大型软件时,如何 高效率地完成高可靠系统的问题。
结构化的程序设计方法
在接受一个任务后应怎样着手进行呢?有两种不同的方法: 1. 一种是自顶向下,逐步细化。 2. 一种是自下而上,逐步积累。
以写文章为 例来说明这个问题: 有的人胸有全局,先想好整个文章分成哪几个部分,然后再进一步考 虑每一部分分成哪几节,每一节分成哪 几段,每一段应包含什么内容 ,用这种方法逐步分解,直到作者认为可以直接将各小段表达为文字 语句为止。这种方法就叫做 “自顶向下,逐步细化”。 另有些人写文章时不拟提纲,如同写信一样提起笔就写,想到哪里就 写到哪里,直到他认为把想写的内容都写出来了为止。 这种方法叫做 “自下而上,逐步积累”。
面向对象程序设计.46页PPT
面向对象程序设计.
11、获得的成功越大,就越令人高兴 。野心 是使人 勤奋的 原因, 节制使 人枯萎 。 12、不问收获,只问耕耘。如同种树 ,先有 根茎, 再有枝 叶,尔 后花实 ,好好 劳动, 不要想 太多, 那样只 会使人 胆孝懒 惰,因 为不实 践,甚 至不接 触社会 ,难道 你是野 人。(名 言网) 13、不怕,不悔(虽然只有四个字,但 常看常 新。 14、我在心里默默地为每一个人祝福 。我爱 自己, 我用清 洁与节 制来珍 惜我的 身体, 我用智 慧和知 识充实 我的头 脑。 15、这世上的一切都借希望而完成。 农夫不 会播下 一粒玉 米,如 果他不 曾希望 它长成 种籽; 单身汉 不会娶 妻,如 果他不 曾希望 有小孩 ;商人 或手艺 人不会 工作, 如果他 不曾希 望因此 而有收 益。--里。——西班牙
37、我们唯一不会改正的缺点是软弱。——拉罗什福科
xiexie! 38、我这个人走得很慢,但是我从不后退。——亚伯拉罕·林肯
39、勿问成功的秘诀为何,且尽全力做你应该做的事吧。——美华纳
40、学而不思则罔,思而不学则殆。——孔子
11、获得的成功越大,就越令人高兴 。野心 是使人 勤奋的 原因, 节制使 人枯萎 。 12、不问收获,只问耕耘。如同种树 ,先有 根茎, 再有枝 叶,尔 后花实 ,好好 劳动, 不要想 太多, 那样只 会使人 胆孝懒 惰,因 为不实 践,甚 至不接 触社会 ,难道 你是野 人。(名 言网) 13、不怕,不悔(虽然只有四个字,但 常看常 新。 14、我在心里默默地为每一个人祝福 。我爱 自己, 我用清 洁与节 制来珍 惜我的 身体, 我用智 慧和知 识充实 我的头 脑。 15、这世上的一切都借希望而完成。 农夫不 会播下 一粒玉 米,如 果他不 曾希望 它长成 种籽; 单身汉 不会娶 妻,如 果他不 曾希望 有小孩 ;商人 或手艺 人不会 工作, 如果他 不曾希 望因此 而有收 益。--里。——西班牙
37、我们唯一不会改正的缺点是软弱。——拉罗什福科
xiexie! 38、我这个人走得很慢,但是我从不后退。——亚伯拉罕·林肯
39、勿问成功的秘诀为何,且尽全力做你应该做的事吧。——美华纳
40、学而不思则罔,思而不学则殆。——孔子
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 外联成员函数(外联函数)
是指在类定义体中声明成员函数,而在类外定义成员函数。作用 域区分符::指明成员函数或数据成员所在的类。::前若不跟类名,则成为 全局数据或全局函数(非成员函数)。
在类外定义成员函数的具体形式为: 返回值类型 类名::成员函数名(形式参数表) {
// 函数体 }
外联函数的定义
{ private: // 私有数据成员和成员函数 public: // 公有数据成员和成员函数 protected: // 保护的数据成员和成员函数
};
有关类定义的几点说明1:
(1) class是定义类的关键字,类的命名须符合C++ 的命名规则。{ }内是类的定义体部分,说明该类 的成员,类的成员包括数据成员和成员函数。
};
(2) 使用关键字inline定义内联成员函数(显式声明)
inline void Tdate::Set(int m,int d,int y) {
month=m; day=d; year=y; }
或 void inline Tdate::Set(int m,int d,int y) {
month=m; day=d; year=y; }
有关类定义的几点说明3:
(8) 结构体和类的区别
– C语言中结构体只有数据成员,无函数成员。C++语言中 的结构体可有数据成员和函数成员。
– 缺省情况下,结构体中的数据成员和成员函数都是公有 的,而在类中是私有的。
– 结构体变量中的数据可随意修改,不利于数据的保护和 控制;结构体中数据及其操作是分离的,使程序的复杂 性难以控制;程序的可重用性不好,严重影响了软件的 生产效率。
类和对象
2020/12/09
1
3.1 类
类是C++的数据抽象和封装机制,它描述了一组具有相同属性(数 据成员)和行为特征(成员函数)的对象。在系统实现中,类是一 种共享机制,它提供了本类对象共享的操作实现。类是代码复用的 基本单位,它可以实现抽象数据类型,创建对象,实现属性和行为 的封装。
对象是类的实例。类是对一组具有相同特征的对象的抽象描述,所 有这些对象都是这个类的实例。在程序设计中,类是一种数据类型, 对象则是该类型的变量。
类提供了完整的解决特定问题的能力,因为类描述了数据结构(对 象属性)、算法(对象行为)和外部接口(消息协议)。
C++中一个类的定义包含数据成员和成员函数两部分内容。数据成 员定义该类对象的属性,不同对象的属性可以不同;成员函数定义 该类对象的操作即行为。
3.1.1类的定义
类由三部分组成:类名、数据成员和成员函数。 class 类名
(2) 类成员的三种访问控制权限:
– public(公有成员):对外完全开放。 – private(私有成员):仅对内开放,一般不允许外
部函数访问。 – protected(保护成员):权限和private类似,区
别仅体现在类的继承时访问权限的不同。
有关类定义的几点说明2:
(3) 类具有封装性,C++中的数据封装通过类来实现。外部不 能随意访问说明为protected和private的成员。
(2) 类的实现部分单独组成一个文件(.cpp),用来存放 类的成员函数的定义;
(4) 一般情况下,类名的第一个字母大写。 (5) 类的公有成员提供了类的接口。一般情况下,先定义公有
成员,再定义保护成员和私有成员,可以方便阅读者首先 了解这个类的接口。 (6) 数据成员可以是任何数据类型,但是不能用自动(auto)、 寄存器(register)或外部(extern)进行说明。
(7) 在定义类时,不允许初始化数据成员。
void Print();
private:
// 定义私有数据成员
int month;
int day;
int year;
};
// 类定义体的结束
3.1.2 类中成员函数的定义
类的数据成员说明对象的特征,成员函数决定对象的操 作行为。成员函数是程序算法实现的部分,是对封装的数据 操作的唯一途径。类的成员函数有两种定义方法:外联定义 和内联定义。
}
......
2. 内联成员函数(内联函数、内部函数、内置函数)
内联函数是指程序在编译时将函数的代码插入在 函数的每个调用处,作为函数体的内部扩展,用 来避免函数调用机制所带来的开销,提高程序的 执行效率。可以将那些仅由少数几条简单代码组 成,却在程序中被频繁调用的函数定义为内联函 数。
内联函数有两种定义方法,一种方法是在类定义 体内定义成员函数,另一种方法是使用inline关 键字。
– 一般仅描述数据成员时使用结构体,当既有数据成员又 有成员函数时使用类。
(9) 在类定义时不能丢掉类定义的结束标志分号。
类定义实例
例:定义日期类
class Tdate
// 定义日期类
{
public:
// 定义公有成员函数
void Set(int m,int d,int y);
int Isleapyear();
class Tdate {
public: int Isleapyear();
...... private: int month; ......
};
//成员函数的声明
int Tdate::Isleapyear()
// 成员函数的定义
{
return (year%4==0&&year%100!=0)||(year%400==0);
(1) 在类定义体内定义内联函数(隐式声明)
class Tdate { public:
void Set(int m, int d, int y) // 在类内直接定义成员函 数
{ month=m; day=d; year=y;
}
private: int month; int day; int year;
3.C++程序结构
一般情况下,一个模块由规范说明和实现两部分组成。 规范说明部分描述一个模块与其它模块的接口,而实现部分 则是模块的实现细节。模块中的说明部分作为一个单独的文 件存放,该文件被称为头文件;而实现部分可能由多个C++ 源程序文件组成。一般一个较大的文件可以分为三个文件来 存放:
(1) 将类的说明作为一个头文件(.h)来存放。内联函 数原型和定义一般归入头文件;
是指在类定义体中声明成员函数,而在类外定义成员函数。作用 域区分符::指明成员函数或数据成员所在的类。::前若不跟类名,则成为 全局数据或全局函数(非成员函数)。
在类外定义成员函数的具体形式为: 返回值类型 类名::成员函数名(形式参数表) {
// 函数体 }
外联函数的定义
{ private: // 私有数据成员和成员函数 public: // 公有数据成员和成员函数 protected: // 保护的数据成员和成员函数
};
有关类定义的几点说明1:
(1) class是定义类的关键字,类的命名须符合C++ 的命名规则。{ }内是类的定义体部分,说明该类 的成员,类的成员包括数据成员和成员函数。
};
(2) 使用关键字inline定义内联成员函数(显式声明)
inline void Tdate::Set(int m,int d,int y) {
month=m; day=d; year=y; }
或 void inline Tdate::Set(int m,int d,int y) {
month=m; day=d; year=y; }
有关类定义的几点说明3:
(8) 结构体和类的区别
– C语言中结构体只有数据成员,无函数成员。C++语言中 的结构体可有数据成员和函数成员。
– 缺省情况下,结构体中的数据成员和成员函数都是公有 的,而在类中是私有的。
– 结构体变量中的数据可随意修改,不利于数据的保护和 控制;结构体中数据及其操作是分离的,使程序的复杂 性难以控制;程序的可重用性不好,严重影响了软件的 生产效率。
类和对象
2020/12/09
1
3.1 类
类是C++的数据抽象和封装机制,它描述了一组具有相同属性(数 据成员)和行为特征(成员函数)的对象。在系统实现中,类是一 种共享机制,它提供了本类对象共享的操作实现。类是代码复用的 基本单位,它可以实现抽象数据类型,创建对象,实现属性和行为 的封装。
对象是类的实例。类是对一组具有相同特征的对象的抽象描述,所 有这些对象都是这个类的实例。在程序设计中,类是一种数据类型, 对象则是该类型的变量。
类提供了完整的解决特定问题的能力,因为类描述了数据结构(对 象属性)、算法(对象行为)和外部接口(消息协议)。
C++中一个类的定义包含数据成员和成员函数两部分内容。数据成 员定义该类对象的属性,不同对象的属性可以不同;成员函数定义 该类对象的操作即行为。
3.1.1类的定义
类由三部分组成:类名、数据成员和成员函数。 class 类名
(2) 类成员的三种访问控制权限:
– public(公有成员):对外完全开放。 – private(私有成员):仅对内开放,一般不允许外
部函数访问。 – protected(保护成员):权限和private类似,区
别仅体现在类的继承时访问权限的不同。
有关类定义的几点说明2:
(3) 类具有封装性,C++中的数据封装通过类来实现。外部不 能随意访问说明为protected和private的成员。
(2) 类的实现部分单独组成一个文件(.cpp),用来存放 类的成员函数的定义;
(4) 一般情况下,类名的第一个字母大写。 (5) 类的公有成员提供了类的接口。一般情况下,先定义公有
成员,再定义保护成员和私有成员,可以方便阅读者首先 了解这个类的接口。 (6) 数据成员可以是任何数据类型,但是不能用自动(auto)、 寄存器(register)或外部(extern)进行说明。
(7) 在定义类时,不允许初始化数据成员。
void Print();
private:
// 定义私有数据成员
int month;
int day;
int year;
};
// 类定义体的结束
3.1.2 类中成员函数的定义
类的数据成员说明对象的特征,成员函数决定对象的操 作行为。成员函数是程序算法实现的部分,是对封装的数据 操作的唯一途径。类的成员函数有两种定义方法:外联定义 和内联定义。
}
......
2. 内联成员函数(内联函数、内部函数、内置函数)
内联函数是指程序在编译时将函数的代码插入在 函数的每个调用处,作为函数体的内部扩展,用 来避免函数调用机制所带来的开销,提高程序的 执行效率。可以将那些仅由少数几条简单代码组 成,却在程序中被频繁调用的函数定义为内联函 数。
内联函数有两种定义方法,一种方法是在类定义 体内定义成员函数,另一种方法是使用inline关 键字。
– 一般仅描述数据成员时使用结构体,当既有数据成员又 有成员函数时使用类。
(9) 在类定义时不能丢掉类定义的结束标志分号。
类定义实例
例:定义日期类
class Tdate
// 定义日期类
{
public:
// 定义公有成员函数
void Set(int m,int d,int y);
int Isleapyear();
class Tdate {
public: int Isleapyear();
...... private: int month; ......
};
//成员函数的声明
int Tdate::Isleapyear()
// 成员函数的定义
{
return (year%4==0&&year%100!=0)||(year%400==0);
(1) 在类定义体内定义内联函数(隐式声明)
class Tdate { public:
void Set(int m, int d, int y) // 在类内直接定义成员函 数
{ month=m; day=d; year=y;
}
private: int month; int day; int year;
3.C++程序结构
一般情况下,一个模块由规范说明和实现两部分组成。 规范说明部分描述一个模块与其它模块的接口,而实现部分 则是模块的实现细节。模块中的说明部分作为一个单独的文 件存放,该文件被称为头文件;而实现部分可能由多个C++ 源程序文件组成。一般一个较大的文件可以分为三个文件来 存放:
(1) 将类的说明作为一个头文件(.h)来存放。内联函 数原型和定义一般归入头文件;