C++程序设计教程第二版课件C++程序设计教程7章节

上传人:E**** 文档编号:91277810 上传时间:2019-06-27 格式:PPT 页数:28 大小:346.50KB
返回 下载 相关 举报
C++程序设计教程第二版课件C++程序设计教程7章节_第1页
第1页 / 共28页
C++程序设计教程第二版课件C++程序设计教程7章节_第2页
第2页 / 共28页
C++程序设计教程第二版课件C++程序设计教程7章节_第3页
第3页 / 共28页
C++程序设计教程第二版课件C++程序设计教程7章节_第4页
第4页 / 共28页
C++程序设计教程第二版课件C++程序设计教程7章节_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《C++程序设计教程第二版课件C++程序设计教程7章节》由会员分享,可在线阅读,更多相关《C++程序设计教程第二版课件C++程序设计教程7章节(28页珍藏版)》请在金锄头文库上搜索。

1、03:06:07,1,C+程序设计教程(第二版),第七章 程序结构 Chapter 7 Program Structure,清华大学出版社 钱 能,03:06:07,2,程序结构: 使程序得以运行的框架组织便是程序结构,对程序结构的研究,是为了更好地表达算法思想,使其符合编译逻辑,又具有更好的可读性和可维护性 学习目标: 1. 从简单的函数层层调用,初步理解+程序结构 2. 学习合理组织程序的规则与经验,掌握扩展程序规模的基本方法,03:06:07,3,第七章内容,函数组织( Function Organization ) 头文件 ( Header Files ) 全局数据 ( Global

2、Data ) 静态数据 ( Static Data ) 作用域与生命期 ( Scope & Lifetime ) 名空间 ( namespace ) 预编译 ( Pre-Compilation ),03:06:07,4,1. 函数组织 ( Function Organization ),函数:对输入参数负责,埋头做自己的事,最终返回结果 函数组织:通过在函数中进行函数调用来扩展运行的规模,层层叠叠的函数构成树结构 做法:将若干个函数组织成文件,又将若干个文件构成程序的办法来进行编程分工,03:06:07,5,对如下的函数调用关系,进行文件划分,文件,文件,文件,03:06:07,6,. 头文件

3、 ( Header Files ),原始头文件:作为共同开发的项目,为了共享彼此的过程资源(函数),将全体函数声明放在一个共用的头文件中 界面头文件:界定模块可用资源(函数,数据,类型等)(可由一个或几个头文件组合,其实现由他人提供),或提供他人使用的模块资源它是由软件工程师分发的、以规范项目开发为目的的资源文件 做法:练习划分函数组,模仿学习构造头文件,并注意头文件的应含内容,03:06:07,7,/ abc.h void f1 ( ); void f2 ( ); void f3 ( ); void g1 ( ); void g2 ( ); void p ( ); void h ( );,原

4、始头文件 (包含age5的图中的一切函数声明),03:06:07,8,头文件的使用:使函数调用免于声明,/ a1.cpp #include”abc.h” void f1() if() p(); g1(); else g2(); h(); ,03:06:07,9,头文件的使用:使函数调用免于声明,/ a2.cpp #include”abc.h” int main() f1(); f2(); f3(); /- void f3() f1(); /- void p() f3(); /-,03:06:07,10,头文件的使用:使函数调用免于声明,/ a3.cpp #include”abc.h” void

5、 h() void f2() g1(); g2(); /- void g1() void g2() ,03:06:07,11,界面头文件,/ a1.h a1.cpp提供的资源 void f1(); / a2.h a2.cpp提供的资源 void p(); / a3.h a3.cpp提供的资源 void g1(); void g2(); void f2(); void h();,03:06:07,12,/ a1.cpp #include”a2.h” #include”a3.h” void f1() if() p(); g1(); else g2(); h(); ,使用界面头文件,03:06:07

6、,13,/ a2.cpp #include”a1.h” #include”a3.h” static void f3(); int main() f1(); f2(); f3(); void f3() f1(); void p() f3(); ,使用界面头文件,03:06:07,14,/ a3.cpp #include”a3.h” void h() void f2() g1(); g2(); void g1() void g2() ,使用界面头文件,03:06:07,15,3. 全局数据 ( Global Data ),全局数据:使若干个模块在程序范围内共享(读与写)数据,是若干程序文件沟通数据

7、的一种形式 意义:模块的独立性由数据的封闭性来支持全局数据破坏了数据的封闭性,因而对小程序简单而对规范化程序则不登大雅之堂 做法:练习函数之间用参数传递数据的常规形式,尽量避免使用全局数据,03:06:07,16,例如:对于矩阵的输入、处理和输出,vector a; / global Data void input ( ); void transpose ( ); void print ( ); int main ( ) input ( ); / using a transpose ( ); / using a print ( ); / using a ,03:06:07,17,消去全局数据:

8、前一个过程的输出作为后一个过程的输入,typedef vector Mat ; Mat input ( ) ; Mat transpose ( const Mat ,03:06:07,18,在多个程序文件组成的程序中共享数据, 要遵守一次定义规则,/ item1.cpp #include using namespace std ; int n = 8 ; / define void f ( ) ; int main ( ) coutn”n”; f ( ) ; ,/ item2.cpp #include using namespace std ; extern int n ; / declare

9、 void f ( ) coutn”n”; ,03:06:07,19,4. 静态数据 ( Static Data ),静态全局数据:在一个程序文件中共享的数据注意:全局数据则在多个程序文件中共享数据 静态局部数据:在屡次调用的同一个函数中共享的数据,03:06:07,20,演示静态局部变量,void func() static int a=2; a+; int b=5; b+; cout“a=“a“, b=“bendl; int main() func(); func(); / a=3, b=6 / a=4, b=6,03:06:07,21,5. 作用域与生命期 ( Scope & Lifet

10、ime ),作用域:有很多种,变化最多的是局部作用域作用域遵守就近原则,它总是取用最贴近的名字,除非名字加前缀,则指特定区域的名字 生命期:实体一旦产生(定义)后,存活时间的度量 作用域与生命期:作用域是编程规范,用于编译时的语法检查,生命期是程序运行中的实体存活度量,体现运行程序的内在规律名字访问遵守作用域规则,而作用域以实体存活为前提,03:06:07,22,处于生命期中的实体总是能被安全访问到,即使违背模块的黑盒准则,int* f() static int a=1; a+; return / 8,03:06:07,23,生命期消亡的实体,其空间位置上的访问,得不到安全保证,int* f(

11、) int a=1; int* p= / 1 / 4198830,03:06:07,24,. 名空间 ( namespace ),名空间:解决名字冲突的方法所有名字都有空间归属,在一定的空间中,名字是不允许冲突的引用一个名字时,加上空间归属的前缀,就可以唯一确定该名字所对应的实体 无前缀名字:很多时候,名字都是无前缀的,这是因为事先已经指定了默认名字空间如果默认名空间在两个以上,则必须注意名字冲突的可能性,03:06:07,25,名空间的使用,/ 局部名空间默认 #include using std:cout; using std:endl; /- int abs ( int a ) retu

12、rn a0 ? a : -a; /- int main ( ) int a = abs ( -5 ); / 使用自定义函数 int b = std:abs ( -5 ); / 使用标准库函数 coutaendlbendl; ,03:06:07,26,7. 预编译 ( Pre-Compilation ),预编译:+在正式编译前的准备工作,它包括文件的加盟、代码的取舍、字符的替代等操作 文件加盟由include指令引导,代码取舍由ifdef或ifndef引导,字符替代功能在逐渐退化,因为+语言本身完全可以胜任这项工作,03:06:07,27,头文件的可嵌套性,使得必须人为控制文件的展开操作,这就是头文件卫士的由来(x.cpp中将出现二次struct Date定义),/a.h #include”b.h” / ,/x.cpp #include”a.h” #include”b.h” / ,/b.h struct Date int year,month,day; ;,03:06:07,28,若头文件中出现类或结构定义,则应在其外面施加保护 保护的方法是采用宏定义指令.以保证该类或结构定义只执行一次,/b.h #ifndef DATE #define DATE struct Date int year, month, day; ; #endif,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号