C++ 程序设计教程(第二版):第7章 程序结构

上传人:人*** 文档编号:569274952 上传时间:2024-07-28 格式:PPT 页数:28 大小:338KB
返回 下载 相关 举报
C++ 程序设计教程(第二版):第7章 程序结构_第1页
第1页 / 共28页
C++ 程序设计教程(第二版):第7章 程序结构_第2页
第2页 / 共28页
C++ 程序设计教程(第二版):第7章 程序结构_第3页
第3页 / 共28页
C++ 程序设计教程(第二版):第7章 程序结构_第4页
第4页 / 共28页
C++ 程序设计教程(第二版):第7章 程序结构_第5页
第5页 / 共28页
点击查看更多>>
资源描述

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

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

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

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

4、void p ( );void h ( );原始头文件 (包含age5的图中的一切函数声明)11:21:238头文件的使用:使函数调用免于声明/ a1.cpp#include”abc.h”void f1() if() p(); g1(); else g2(); h(); 11:21:239头文件的使用:使函数调用免于声明/ a2.cpp#include”abc.h”int main() f1(); f2(); f3();/-void f3() f1();/-void p() f3();/-11:21:2310头文件的使用:使函数调用免于声明/ a3.cpp#include”abc.h”void

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

6、.h”#include”a3.h”static void f3();int main() f1(); f2(); f3();void f3() f1();void p() f3();使用界面头文件11:21:2314/ a3.cpp#include”a3.h”void h() void f2() g1(); g2();void g1() void g2() 使用界面头文件11:21:23153. 全局数据全局数据 ( Global Data )全局数据:使若干个模块在程序范围内共享(读与写)数据,是若干程序文件沟通数据的一种形式意义:模块的独立性由数据的封闭性来支持全局数据破坏了数据的封闭性,

7、因而对小程序简单而对规范化程序则不登大雅之堂做法:练习函数之间用参数传递数据的常规形式,尽量避免使用全局数据11:21:2316例如:对于矩阵的输入、处理和输出vectorvector a; / global Datavoid input ( );void transpose ( );void print ( );int main ( ) input ( ); / using a transpose ( ); / using a print ( ); / using a11:21:2317消去全局数据:前一个过程的输出作为后一个过程的输入typedef vectorvector Mat ; M

8、at input ( ) ;Mat transpose ( const Mat& a) ;void print ( const Mat& a ) ;int main ( ) print ( transpose ( input ( ) ) ) ;11:21:2318在多个程序文件组成的程序中共享数据,要遵守一次定义规则/ item1.cpp#includeusing namespace std ;int n = 8 ; / define void f ( ) ;int main ( ) coutn”n”; f ( ) ;/ item2.cpp#includeusing namespace std

9、 ;extern int n ; / declarevoid f ( ) coutn”n”; 11:21:23194. 静态数据静态数据 ( Static Data )静态全局数据:在一个程序文件中共享的数据注意:全局数据则在多个程序文件中共享数据静态局部数据:在屡次调用的同一个函数中共享的数据11:21:2320演示静态局部变量void func() static int a=2; a+; int b=5; b+; couta=a, b=bendl;int main() func(); func();/ a=3, b=6/ a=4, b=611:21:23215. 作用域与生命期作用域与生命

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

11、k,但偷越到了函数f的局部区 cout*pa“n”;/ 811:21:2423生命期消亡的实体,其空间位置上的访问,得不到安全保证int* f() int a=1; int* p=&a; return p; / a的生命期在此处消亡int main() int* pa = f(); cout*pa“n”; cout*pa“n”;/ 1/ 419883011:21:2424. 名空间名空间 ( namespace )名空间:解决名字冲突的方法所有名字都有空间归属,在一定的空间中,名字是不允许冲突的引用一个名字时,加上空间归属的前缀,就可以唯一确定该名字所对应的实体无前缀名字:很多时候,名字都是无

12、前缀的,这是因为事先已经指定了默认名字空间如果默认名空间在两个以上,则必须注意名字冲突的可能性11:21:2425名空间的使用/ 局部名空间默认#includeusing std:cout;using std:endl;/-int abs ( int a ) return a0 ? a : -a; /-int main ( ) int a = abs ( -5 ); / 使用自定义函数 int b = std:abs ( -5 ); / 使用标准库函数 coutaendlbendl;11:21:24267. 预编译预编译 ( Pre-Compilation )预编译:+在正式编译前的准备工作,

13、它包括文件的加盟、代码的取舍、字符的替代等操作文件加盟由include指令引导,代码取舍由ifdef或ifndef引导,字符替代功能在逐渐退化,因为+语言本身完全可以胜任这项工作11:21:2427头文件的可嵌套性,使得必须人为控制文件的展开操作,这就是头文件卫士的由来(x.cpp中将出现二次struct Date定义)/a.h#include”b.h”/ /x.cpp#include”a.h”#include”b.h”/ /b.hstruct Date int year,month,day; ;11:21:2428若头文件中出现类或结构定义,则应在其外面施加保护保护的方法是采用宏定义指令.以保证该类或结构定义只执行一次/b.h #ifndef DATE #define DATE struct Date int year, month, day; ;#endif

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

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