C语言面向对象程序设计ppt课件

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用CFrameWnd派生类产生对象 3. 基于对话框的应用程序(MFC AppWizard(exe)):
用Cdialog派生类产生对象
4. 基于文档/视图结构的应用程序(MFC AppWizard(exe)) 两种类型:单文档界面;多文档界面; 单文档界面:例记事本、写字板、终端仿真界面等 多文档界面:例Word、Powerpoint、Excel、VC++等
8. MFC类库及程序框架
Windows编程思想: 事件驱动, 即靠消息循环机制实现
消息举例: Word中用户选择菜单中的打印, 即向该文档的 的printer对象发消息
程序根据消息 执行相应的方法 (即成员函数)
.
当启动一个面向对象程序时, 程序将做: 创建对象; 通过消息处理对象, 即执行对象的方法, 删除对象;
{
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;
数组方式存放,见教材第140页; 结构链表存放,见教材第227页;
main() {
读初值: 小孩总数、数小孩间隔数、第一次数的位置; 建立小孩结构数组并初始化;
初始化环链表;
while(当链表中有一个以上节点时) { 找下一个应离队的节点并输出; 从链表中删除该节点;
}
输出最后一个节点(即胜利者)
}
};
其函数声明如下:
1 n
n-1
2 3
...
1. int assign(int *, int *, int *) 三个参数分别为指向总数、间隔数、开始位置的指针
函数返回值为1,则初始化成功;为0,则失败
2. Jose * initial(int , Jose *) 两个参数分别为总数和结构指针, 指向待初始化的结构数组
Windows应用程序的四种消息来源: 1. 输入消息: 鼠标键盘输入的消息 2. 控制消息: 用户改变控制状态时的消息 3. 系统消息: 如创建窗口的消息 4. 用户消息: 用户定义并在程序中主动发送的消息
消息映射表 .
来自百度文库
典型windows应用程序结构:
1. 控制台应用程序(Console Application) 2. 基于框架窗口的应用程序(Win32 Application):
多文档界面有一个当前活动窗口,有窗口菜单 特点:将数据操作与数据显示分开,数据操作在文档中
数据显示在视图中;系统支持的功能多;但系统的 辅助代码也多。
.
程序举例: 第一种已建立过; 第二种,见例子 test1, test2, test3 第三种,见例子 第四种,单文档界面:见例子 test4
多文档界面;见例子
函数返回值为指向环链表的. 最后一个节点的指针
3. Jose * count(int, Jose *) 两个参数分别为数小孩的个数、当前节点的指针 函数返回值为数了小孩个数后的当前节点的前一个节点的指针
4. void process(int, 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;
//分配n个节点
pCur = initial(pJose);
//初始化环链表
pivot = count(begin, pCur);
//当前指针指向开始位置
process(n, m, pivot);
//按照离队顺序, 输出n个小孩
delete [] pJose;
.
}
//释放n个节点
函数定义:
int assign(int *np, int *mp, int *bp)
所有四种程序结构中,多文档界面结构最复杂,功能也最强
.
9. 面向对象程序设计
软件工程
(Object-oriented programming)
面向对象方法的四个特点: 抽象、封装、 继承、多态
• 类是一种对事物对象的抽象,并提倡多层次的抽象;
类的组合: 表示事物对象之间的联系。
• 类的定义是将数据与处理数据的方法封装在一起,
return 0;
}
if( tb < 0) {
//校验开始位置
cerr<<“开始位置输入要大于等于0\n”;
return 0;
}
*np = tn; *mp = tm; *bp = tb;
.
改进链表,用结构化的函数模块方法实现: 建立以下几个函数模块:
1. 数据初始化: 孩子总数, 数孩子的间隔数, 开始数的位置 2. 环链表初始化, 即建立环链表 3. 按照间隔数m在环链表中数小孩 4. 按照离队顺序, 输出所有小孩, 并给出胜利者
节点类型定义(即一个小孩):
struct Jose { int code; Jose * next;
请编一个程序,求Josephus问题的胜利者,已知: 共有n个孩子,每次数m个小孩则离开一个,第一次从第i个
孩子开始数。
考虑问题的方法: 1. 用什么数据类型存放n个孩子,如何表示n个孩子; 2. 在这种存放方式下,用什么算法求解Josephus问题的胜利者。
.
该问题可以用多种方法编写程序: 不同的存放结构,则有不同的实现程序(即算法)。如:
可以隐藏数据,并通过对象访问数据
• 继承机制使程序在已有基础上进行更具体的定义,
代码可以重用,
• 多态:同样的消息被不同的对象接受时产生不同的
方法,如:打印文档时,打印文本和打印图像的方法不同。 .
Josephus问题:
n个孩子围成一圈玩游戏,从第i个孩子开始数,数到m, 则该小孩离开,接着继续数,找到下一个需离开的孩子,… 如此玩下去,圈子只剩下最后一个孩子,该孩子为胜利者。
相关文档
最新文档