C语言面向对象程序设计ppt课件
合集下载
面向对象程序设计 c 的初步知识PPT课件
stud2.display( );
// 调用对象stud2的display函数
return 0;
}
第18页/共32页
在一个类中包含两种成员: 数据和函数,分别称为数据成员和成员函数。在C++中 把一组数据和有权调用这些数据的函数封装在一起,组成一种称为“类(class)”的数 据结构。在上面的程序中,数据成员num,score和成员函数setdata,display组成 了一个名为Student的“类”类型。成员函数是用来对数据成员进行操作的。也就
整体编译。
第9页/共32页
程序的第2行“using namespace std; ” 的意思是“使用命名空间std”。C++标 准库中的类和函数是在命名空间std中声明的,因此程序中如果需要用到C++标准库 (此时就需要用#include命令行),就需要用“using namespace std; ”作声明,
编写的。
第4页/共32页
但是随着软件规模的增大,用C语言编写程序渐渐显得有些吃力了。 C++是由AT&T Bell(贝尔)实验室的Bjarne Stroustrup博士及其同事于20世纪80 年代初在C语言的基础上开发成功的。C++保留了C语言原有的所有优点,增加了面
向对象的机制。 C++是由C发展而来的,与C兼容。用C语言写的程序基本上可以不加修改地用于 C++。从C++的名字可以看出它是C的超集。C++既可用于面向过程的结构化程序 设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。
机高级语言。其中使用最广泛、影响最大的当推BASIC语言和C语言。 BASIC语言是1964年在FORTRAN语言的基础上简化而成的,它是为初学者设计的
面向对象程序设计方法PPT课件
1
面向对象程序设计
前言 第1章 C++语言概述 第2章 数据类型和表达式 第3章 预处理和语句 第4章 函数和作用域 第5章 类和对象(一) 第6章 类和对象(二) 第7章 继承性和派生类 第8章 多态性和虚函数 第9章 C++的I/O流库
2
地位与作用
是计算机科学与技术专业本科生的一门必 修课程
C++程序设计教程.钱能编著.清华大学出版 社.1999
12
第1章 C++语言概述
基本要求 了解:面向对象程序设计的基本思想及 基本概念;面向对象语言的分类和c++中 支持面向对象的特点;面向对象的软件 开发环境;visual c++开发工作台的主要 功能。
13
第1章 C++语言概述
1.1 C++的起源及特点 1.2 面向对象的方法 1.3 面向对象的程序设计语言C++ 1.4 C++程序的编辑、编译和运行 1.5 C++的词法及词法规则 1.6 C++程序的结构
5
面向过程的程序设计(以C语言为例)
1、自上而下(top-down)的设计方式:是一个 自顶向下,逐步求精的过程; 2、以main函数概括出整个应用程序需要做的 事情,而main函数由对一系列的子函数的调 用组成;
main中的每一个子函数都可以被精炼成更 小的函数。重复这个过程,即可完成一个过 程式的设计; 3、特征是以函数为中心,以函数作为划分程 序的基本单位,数据往往处于从属地位。
15
1.1.1 面向对象的由来和发展(续)
20世纪60年代中期,Simula 67语言 面向对象语言的鼻祖,提出了对象、类的概
面向对象程序设计
前言 第1章 C++语言概述 第2章 数据类型和表达式 第3章 预处理和语句 第4章 函数和作用域 第5章 类和对象(一) 第6章 类和对象(二) 第7章 继承性和派生类 第8章 多态性和虚函数 第9章 C++的I/O流库
2
地位与作用
是计算机科学与技术专业本科生的一门必 修课程
C++程序设计教程.钱能编著.清华大学出版 社.1999
12
第1章 C++语言概述
基本要求 了解:面向对象程序设计的基本思想及 基本概念;面向对象语言的分类和c++中 支持面向对象的特点;面向对象的软件 开发环境;visual c++开发工作台的主要 功能。
13
第1章 C++语言概述
1.1 C++的起源及特点 1.2 面向对象的方法 1.3 面向对象的程序设计语言C++ 1.4 C++程序的编辑、编译和运行 1.5 C++的词法及词法规则 1.6 C++程序的结构
5
面向过程的程序设计(以C语言为例)
1、自上而下(top-down)的设计方式:是一个 自顶向下,逐步求精的过程; 2、以main函数概括出整个应用程序需要做的 事情,而main函数由对一系列的子函数的调 用组成;
main中的每一个子函数都可以被精炼成更 小的函数。重复这个过程,即可完成一个过 程式的设计; 3、特征是以函数为中心,以函数作为划分程 序的基本单位,数据往往处于从属地位。
15
1.1.1 面向对象的由来和发展(续)
20世纪60年代中期,Simula 67语言 面向对象语言的鼻祖,提出了对象、类的概
C面向对象程序设计第2章_类和对象PPT课件
成 员
float score;
void display( )//函数成员
{
<<endl;
cout<<”number: ”<< number; 成
cout<<”name: ”<< name;
员
cout<<”score: ”<< score
函
数
}
};
11
一个复数结构的例子
struct complex{ double real; double image; void init(double r,double i) { real=r; image=i; } double realcomplex() { return real; } …;
公有的。 • 此处所指成员包括数据成员和成员函数。
13
私有成员和公有成员的声明
struct complex{ private:
double real; double image; public: void init(double r,double i) { real=r; image=i; } double realcomplex( ) { return real; } …; };
/*独立函数display */
{
void display(Student * stu)
cout<<”number: ”<< number; 成
{
cout<<”name: ”<< name;
员
printf(”number:%d”,stu->number);
cout<<”score: ”<< score
c面向对象程序设计PPT课件
注意: ① 赋值表达式 a = 1与关系表达式 a = = 1 的区别。 ② 表达式的值为0时语句的执行情况。
2021/4/6
-25-
第25页/共99页
3.2 if选择语句
• 3 注意:二义性(出现嵌套)
int x=-1;
{if (x>0) }
if (x<50)
cout<<“x is <50”endl;
)
{
2021/4/6
}
-47-
第47页/共99页
3.4 循环语句
• do..while循环语句
do {
循环体语句; } while(表达式);
可以是复合语句,其中必须含有改变 条件表达式值的语句。
2021/4/6
-48-
第48页/共99页
do-while 语句
• 执行顺序
先执行循环体语句,后判断条件。 表达式为 true 时,继续执行循环体
using namespace std;
void main()
{
int i=1;
while ( {
)
i<=9
cout<<i<<endl; } i++;
cout<<“循环结束”<<endl;
}
运行结果: 1 2 3 4 5 6 7 8 9 循环结束
2021/4/6
-42-
第42页/共99页
例2:编程计算1+3+5+….+99的值
第3章 过程化语句
总结和作业
3.0 算法的基本控制结构: 算法,基本控制结构,基本控制语句 3.1 顺序结构程序设计 3.2 if选择语句 语句格式,IF嵌套,考点说明 3.3 switch选择语句
2021/4/6
-25-
第25页/共99页
3.2 if选择语句
• 3 注意:二义性(出现嵌套)
int x=-1;
{if (x>0) }
if (x<50)
cout<<“x is <50”endl;
)
{
2021/4/6
}
-47-
第47页/共99页
3.4 循环语句
• do..while循环语句
do {
循环体语句; } while(表达式);
可以是复合语句,其中必须含有改变 条件表达式值的语句。
2021/4/6
-48-
第48页/共99页
do-while 语句
• 执行顺序
先执行循环体语句,后判断条件。 表达式为 true 时,继续执行循环体
using namespace std;
void main()
{
int i=1;
while ( {
)
i<=9
cout<<i<<endl; } i++;
cout<<“循环结束”<<endl;
}
运行结果: 1 2 3 4 5 6 7 8 9 循环结束
2021/4/6
-42-
第42页/共99页
例2:编程计算1+3+5+….+99的值
第3章 过程化语句
总结和作业
3.0 算法的基本控制结构: 算法,基本控制结构,基本控制语句 3.1 顺序结构程序设计 3.2 if选择语句 语句格式,IF嵌套,考点说明 3.3 switch选择语句
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
请编一个程序,求Josephus问题的胜利者,已知: 共有n个孩子,每次数m个小孩则离开一个,第一次从第i个
孩子开始数。
考虑问题的方法: 1. 用什么数据类型存放n个孩子,如何表示n个孩子; 2. 在这种存放方式下,用什么算法求解Josephus问题的胜利者。
.
该问题可以用多种方法编写程序: 不同的存放结构,则有不同的实现程序(即算法)。如:
可以隐藏数据,并通过对象访问数据
• 继承机制使程序在已有基础上进行更具体的定义,
代码可以重用,
• 多态:同样的消息被不同的对象接受时产生不同的
方法,如:打印文档时,打印文本和打印图像的方法不同。 .
Josephus问题:
n个孩子围成一圈玩游戏,从第i个孩子开始数,数到m, 则该小孩离开,接着继续数,找到下一个需离开的孩子,… 如此玩下去,圈子只剩下最后一个孩子,该孩子为胜利者。
8. MFC类库及程序框架
Windows编程思想: 事件驱动, 即靠消息循环机制实现
消息举例: Word中用户选择菜单中的打印, 即向该文档的 的printer对象发消息
程序根据消息 执行相应的方法 (即成员函数)
.
当启动一个面向对象程序时, 程序将做: 创建对象; 通过消息处理对象, 即执行对象的方法, 删除对象;
用CFrameWnd派生类产生对象 3. 基于对话框的应用程序(MFC AppWizard(exe)):
用Cdialog派生类产生对象
4. 基于文档/视图结构的应用程序(MFC AppWizard(exe)) 两种类型:单文档界面;多文档界面; 单文档界面:例记事本、写字板、终端仿真界面等 多文档界面:例Word、Powerpoint、Excel、VC++等
//分配n个节点
pCur = iniount(begin, pCur);
//当前指针指向开始位置
process(n, m, pivot);
//按照离队顺序, 输出n个小孩
delete [] pJose;
.
}
//释放n个节点
函数定义:
int assign(int *np, int *mp, int *bp)
return 0;
}
if( tb < 0) {
//校验开始位置
cerr<<“开始位置输入要大于等于0\n”;
return 0;
}
*np = tn; *mp = tm; *bp = tb;
{
int tn, tm, tb;
cout<<“请输入小孩的总数, 数的间隔数以及开始数的位置:\n”;
cin>>tn>>tm>>tb;
if( tn < 2) {
//校验小孩总数
cerr<<“总数输入要大于1,\n”;
return 0;
}
if( tm < 1 || tm > tn) {
//校验间隔数
cerr<<“间隔数输入要大于0或小于等于”<<tn<<endl;
.
改进链表,用结构化的函数模块方法实现: 建立以下几个函数模块:
1. 数据初始化: 孩子总数, 数孩子的间隔数, 开始数的位置 2. 环链表初始化, 即建立环链表 3. 按照间隔数m在环链表中数小孩 4. 按照离队顺序, 输出所有小孩, 并给出胜利者
节点类型定义(即一个小孩):
struct Jose { int code; Jose * next;
所有四种程序结构中,多文档界面结构最复杂,功能也最强
.
9. 面向对象程序设计
软件工程
(Object-oriented programming)
面向对象方法的四个特点: 抽象、封装、 继承、多态
• 类是一种对事物对象的抽象,并提倡多层次的抽象;
类的组合: 表示事物对象之间的联系。
• 类的定义是将数据与处理数据的方法封装在一起,
Windows应用程序的四种消息来源: 1. 输入消息: 鼠标键盘输入的消息 2. 控制消息: 用户改变控制状态时的消息 3. 系统消息: 如创建窗口的消息 4. 用户消息: 用户定义并在程序中主动发送的消息
消息映射表 .
典型windows应用程序结构:
1. 控制台应用程序(Console Application) 2. 基于框架窗口的应用程序(Win32 Application):
};
其函数声明如下:
1 n
n-1
2 3
...
1. int assign(int *, int *, int *) 三个参数分别为指向总数、间隔数、开始位置的指针
函数返回值为1,则初始化成功;为0,则失败
2. Jose * initial(int , Jose *) 两个参数分别为总数和结构指针, 指向待初始化的结构数组
主函数的定义为:
void main()
{
int n, m, begin;
if(! assign(&n,&m,&begin)) { //读入总数n,间隔数m,开始位置begin
cout<<“Initial data error!”<<endl; //数据初始化出错
return;
}
Jose *pJose = new Jose[n], *pCur, *pivot;
函数返回值为指向环链表的. 最后一个节点的指针
3. Jose * count(int, Jose *) 两个参数分别为数小孩的个数、当前节点的指针 函数返回值为数了小孩个数后的当前节点的前一个节点的指针
4. void process(int, int, Jose *) 三个参数分别为小孩总数、间隔数、当前节点的前一个节点 的指针
数组方式存放,见教材第140页; 结构链表存放,见教材第227页;
main() {
读初值: 小孩总数、数小孩间隔数、第一次数的位置; 建立小孩结构数组并初始化;
初始化环链表;
while(当链表中有一个以上节点时) { 找下一个应离队的节点并输出; 从链表中删除该节点;
}
输出最后一个节点(即胜利者)
}
多文档界面有一个当前活动窗口,有窗口菜单 特点:将数据操作与数据显示分开,数据操作在文档中
数据显示在视图中;系统支持的功能多;但系统的 辅助代码也多。
.
程序举例: 第一种已建立过; 第二种,见例子 test1, test2, test3 第三种,见例子 第四种,单文档界面:见例子 test4
多文档界面;见例子
孩子开始数。
考虑问题的方法: 1. 用什么数据类型存放n个孩子,如何表示n个孩子; 2. 在这种存放方式下,用什么算法求解Josephus问题的胜利者。
.
该问题可以用多种方法编写程序: 不同的存放结构,则有不同的实现程序(即算法)。如:
可以隐藏数据,并通过对象访问数据
• 继承机制使程序在已有基础上进行更具体的定义,
代码可以重用,
• 多态:同样的消息被不同的对象接受时产生不同的
方法,如:打印文档时,打印文本和打印图像的方法不同。 .
Josephus问题:
n个孩子围成一圈玩游戏,从第i个孩子开始数,数到m, 则该小孩离开,接着继续数,找到下一个需离开的孩子,… 如此玩下去,圈子只剩下最后一个孩子,该孩子为胜利者。
8. MFC类库及程序框架
Windows编程思想: 事件驱动, 即靠消息循环机制实现
消息举例: Word中用户选择菜单中的打印, 即向该文档的 的printer对象发消息
程序根据消息 执行相应的方法 (即成员函数)
.
当启动一个面向对象程序时, 程序将做: 创建对象; 通过消息处理对象, 即执行对象的方法, 删除对象;
用CFrameWnd派生类产生对象 3. 基于对话框的应用程序(MFC AppWizard(exe)):
用Cdialog派生类产生对象
4. 基于文档/视图结构的应用程序(MFC AppWizard(exe)) 两种类型:单文档界面;多文档界面; 单文档界面:例记事本、写字板、终端仿真界面等 多文档界面:例Word、Powerpoint、Excel、VC++等
//分配n个节点
pCur = iniount(begin, pCur);
//当前指针指向开始位置
process(n, m, pivot);
//按照离队顺序, 输出n个小孩
delete [] pJose;
.
}
//释放n个节点
函数定义:
int assign(int *np, int *mp, int *bp)
return 0;
}
if( tb < 0) {
//校验开始位置
cerr<<“开始位置输入要大于等于0\n”;
return 0;
}
*np = tn; *mp = tm; *bp = tb;
{
int tn, tm, tb;
cout<<“请输入小孩的总数, 数的间隔数以及开始数的位置:\n”;
cin>>tn>>tm>>tb;
if( tn < 2) {
//校验小孩总数
cerr<<“总数输入要大于1,\n”;
return 0;
}
if( tm < 1 || tm > tn) {
//校验间隔数
cerr<<“间隔数输入要大于0或小于等于”<<tn<<endl;
.
改进链表,用结构化的函数模块方法实现: 建立以下几个函数模块:
1. 数据初始化: 孩子总数, 数孩子的间隔数, 开始数的位置 2. 环链表初始化, 即建立环链表 3. 按照间隔数m在环链表中数小孩 4. 按照离队顺序, 输出所有小孩, 并给出胜利者
节点类型定义(即一个小孩):
struct Jose { int code; Jose * next;
所有四种程序结构中,多文档界面结构最复杂,功能也最强
.
9. 面向对象程序设计
软件工程
(Object-oriented programming)
面向对象方法的四个特点: 抽象、封装、 继承、多态
• 类是一种对事物对象的抽象,并提倡多层次的抽象;
类的组合: 表示事物对象之间的联系。
• 类的定义是将数据与处理数据的方法封装在一起,
Windows应用程序的四种消息来源: 1. 输入消息: 鼠标键盘输入的消息 2. 控制消息: 用户改变控制状态时的消息 3. 系统消息: 如创建窗口的消息 4. 用户消息: 用户定义并在程序中主动发送的消息
消息映射表 .
典型windows应用程序结构:
1. 控制台应用程序(Console Application) 2. 基于框架窗口的应用程序(Win32 Application):
};
其函数声明如下:
1 n
n-1
2 3
...
1. int assign(int *, int *, int *) 三个参数分别为指向总数、间隔数、开始位置的指针
函数返回值为1,则初始化成功;为0,则失败
2. Jose * initial(int , Jose *) 两个参数分别为总数和结构指针, 指向待初始化的结构数组
主函数的定义为:
void main()
{
int n, m, begin;
if(! assign(&n,&m,&begin)) { //读入总数n,间隔数m,开始位置begin
cout<<“Initial data error!”<<endl; //数据初始化出错
return;
}
Jose *pJose = new Jose[n], *pCur, *pivot;
函数返回值为指向环链表的. 最后一个节点的指针
3. Jose * count(int, Jose *) 两个参数分别为数小孩的个数、当前节点的指针 函数返回值为数了小孩个数后的当前节点的前一个节点的指针
4. void process(int, int, Jose *) 三个参数分别为小孩总数、间隔数、当前节点的前一个节点 的指针
数组方式存放,见教材第140页; 结构链表存放,见教材第227页;
main() {
读初值: 小孩总数、数小孩间隔数、第一次数的位置; 建立小孩结构数组并初始化;
初始化环链表;
while(当链表中有一个以上节点时) { 找下一个应离队的节点并输出; 从链表中删除该节点;
}
输出最后一个节点(即胜利者)
}
多文档界面有一个当前活动窗口,有窗口菜单 特点:将数据操作与数据显示分开,数据操作在文档中
数据显示在视图中;系统支持的功能多;但系统的 辅助代码也多。
.
程序举例: 第一种已建立过; 第二种,见例子 test1, test2, test3 第三种,见例子 第四种,单文档界面:见例子 test4
多文档界面;见例子