版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
11:17:001程序结构:使程序得以运行的框架组织便是程序结构,对程序结构的研究,是为了更好地表达算法思想,使其符合编译逻辑,又具有更好的可读性和可维护性学习目标:
1.从简单的函数层层调用,初步理解C++程序结构
2.学习合理组织程序的规则与经验,掌握扩展程序规模的基本方法11:17:002第七章内容
函数组织(FunctionOrganization)
头文件(HeaderFiles)
全局数据(GlobalData)
静态数据(StaticData)
作用域与生命期(Scope&Lifetime)
名空间(namespace)
预编译(Pre-Compilation)
11:17:0031.函数组织(FunctionOrganization)函数:对输入参数负责,埋头做自己的事,最终返回结果函数组织:通过在函数中进行函数调用来扩展运行的规模,层层叠叠的函数构成树结构做法:将若干个函数组织成文件,又将若干个文件构成程序的办法来进行编程分工11:17:004对如下的函数调用关系,进行文件划分mainf2f1f3g1g2hp文件1文件2文件311:17:0052.头文件(HeaderFiles)原始头文件:作为共同开发的项目,为了共享彼此的过程资源(函数),将全体函数声明放在一个共用的头文件中界面头文件:界定模块可用资源(函数,数据,类型等)(可由一个或几个头文件组合,其实现由他人提供),或提供他人使用的模块资源.它是由软件工程师分发的、以规范项目开发为目的的资源文件做法:练习划分函数组,模仿学习构造头文件,并注意头文件的应含内容11:17:006//abc.hvoidf1();voidf2();voidf3();voidg1();voidg2();voidp();voidh();原始头文件
(包含Page5的图中的一切函数声明)11:17:007头文件的使用:使函数调用免于声明//a1.cpp#include”abc.h”voidf1(){
if(…){p();g1();else{g2();h();}}11:17:008头文件的使用:使函数调用免于声明//a2.cpp#include”abc.h”intmain(){f1();f2();f3();}//-------voidf3(){f1();}//-------voidp(){f3();}//-------11:17:009头文件的使用:使函数调用免于声明//a3.cpp#include”abc.h”voidh(){…}voidf2(){g1();g2();}//-------voidg1(){…}voidg2(){…}11:17:0010界面头文件//a1.ha1.cpp提供的资源voidf1();//a2.h
a2.cpp提供的资源voidp();//a3.h
a3.cpp提供的资源voidg1();voidg2();voidf2();voidh();
11:17:0011//a1.cpp#include”a2.h”#include”a3.h”voidf1(){
if(…){p();g1();
}else{g2();h();}}使用界面头文件11:17:0012//a2.cpp#include”a1.h”#include”a3.h”staticvoidf3();intmain(){f1();f2();f3();}voidf3(){f1();}voidp(){f3();}使用界面头文件11:17:0013//a3.cpp#include”a3.h”voidh(){…}voidf2(){g1();g2();}voidg1(){…}voidg2(){…}使用界面头文件头文件的嵌套引用//a1.ha1.cpp提供的资源voidf1();//a2.h
a2.cpp提供的资源#include<a1.h>voidp();//a3.ha1.cpp提供的资源#include<a1.h>//第1次包含a1.h#include<a2.h>//第2次包含a1.h11:17:0014如何避免头文件嵌套引用#ifndef__A3_H__#define__A3_H__//a3.ha1.cpp提供的资源#include<a1.h>//第1次包含a1.h#include<a2.h>//这里不会再次包含a1.h#endif//__A2_H__11:17:0015//a1.ha1.cpp提供的资源#ifndef__A1_H__#define__A1_H__voidf1();#endif//__A1_H__//a2.h
a2.cpp提供的资源#ifndef__A2_H__#define__A2_H__#include<a1.h>voidp();#endif//__A2_H__11:17:00163.全局数据(GlobalData)全局数据:使若干个模块在程序范围内共享(读与写)数据,是若干程序文件沟通数据的一种形式意义:模块的独立性由数据的封闭性来支持.全局数据破坏了数据的封闭性,因而对小程序简单而对规范化程序则不登大雅之堂做法:练习函数之间用参数传递数据的常规形式,尽量避免使用全局数据11:17:0017例如:对于矩阵的输入、处理和输出vector<vector<int>>a;//globalDatavoidinput();voidtranspose();voidprint();intmain(){input();//usingatranspose();//usingaprint();//usinga}11:17:0018消去全局数据:前一个过程的输出作为后一个过程的输入typedefvector<vector<int>>Mat;Matinput();Mattranspose(constMat&a);voidprint(constMat&a);intmain(){print(transpose(input()));}11:17:0019在多个程序文件组成的程序中共享数据,
//item1.cpp#include<iostream>usingnamespacestd;intn=8;//define
voidf();intmain(){cout<<n<<”\n”;f();}//item2.cpp#include<iostream>usingnamespacestd;externintn;//declarevoidf(){cout<<n<<”\n”;}一次定义规则11:17:0020//item1.cpp#include<iostream>usingnamespacestd;intn=8;//define
voidf();intmain(){cout<<n<<”\n”;f();}//item2.cpp#include<iostream>usingnamespacestd;externintn=8;//declarevoidf(){cout<<n<<”\n”;}全局常量//file1.cppconstintROWS=10;constintCOLUMNS=10;Intmain(){intarr[ROWS][COLUMNS];for(intI=0;I<ROWS;i++) for(intj=0;j<COLUMNS;j++) …}11:17:0021优点:
数值改动简单缺点:
每次修改需要重新编译程序改进方法:
使用向量11:17:00224.静态数据(StaticData)静态全局数据:在一个程序文件中共享的数据.注意:全局数据则在多个程序文件中共享数据静态局部数据:在屡次调用的同一个函数中共享的数据11:17:0023演示静态全局变量(1)voidfunc(){a++;
intb=5;b++;cout<<"a="<<a<<",b="<<b<<endl;}staticinta=2;intmain(){func();func();}11:17:0024演示静态全局变量(2)//file1.cppstaticinta=2;intmain(){ cout<<“a=“<<a<<endl;}//file2.cppexterninta;voidfunc(){ cout<<“a=“<<a<<endl;}11:17:0025演示静态局部变量voidfunc(){
staticinta=2;a++;
intb=5;b++;cout<<"a="<<a<<",b="<<b<<endl;}intmain(){func();func();}//a=3,b=6//a=4,b=611:17:00265.作用域与生命期(Scope&Lifetime)作用域:有很多种,变化最多的是局部作用域.作用域遵守就近原则,它总是取用最贴近的名字,除非名字加前缀,则指特定区域的名字生命期:实体一旦产生(定义)后,存活时间的度量作用域与生命期:作用域是编程规范,用于编译时的语法检查,生命期是程序运行中的实体存活度量,体现运行程序的内在规律.名字访问遵守作用域规则,而作用域以实体存活为前提11:17:0027处于生命期中的实体总是能被安全访问到,即使违背模块的黑盒准则int*f(){
staticinta=1;a++;
return&a;}intmain(){
int*pa=f();*pa=8;//ok,但偷越到了函数f的局部区
cout<<*pa<<“\n”;}//811:17:0028生命期消亡的实体,其空间位置上的访问,得不到安全保证int*f(){
inta=1;
int*p=&a;
returnp;}//a的生命期在此处消亡intmain(){
int*pa=f();cout<<*pa<<“\n”;cout<<*pa<<“\n”;}//1//4198830交叉作用域与解决措施inta=3;voidfn(){inta=4;{inta=6;cout<<a;}}11:17:002911:17:00306.名空间(namespace)名空间:解决名字冲突的方法.所有名字都有空间归属,在一定的空间中,名字是不允许冲突的.引用一个名字时,加上空间归属的前缀,就可以唯一确定该名字所对应的实体无前缀名字:很多时候,名字都是无前缀的,这是因为事先已经指定了默认名字空间.如果默认名空间在两个以上,则必须注意名字冲突的可能性11:17:0031名空间的使用//局部名空间默认#include<iostream>usingstd::cout;usingstd::endl;//-------------------------------------intabs(inta){returna>0?a:-a;}//-------------------------------------intmain(){
inta=abs(-5);//使用自定义函数
intb=std::abs(-5);//使用标准库函数
cout<<a<<endl<<b<<endl;}11:17:0032名空间的组织//局部名空间默认namespacemyswap;Intn=10;voidswap(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国中心管式纤带光缆数据监测研究报告
- 多层钢框架结构施工技术方案
- 2024年中国膜片式输油泵市场调查研究报告
- 2024年中国省配线系统市场调查研究报告
- 2024年中国电器设备原配件市场调查研究报告
- 2024年中国榆木餐台市场调查研究报告
- 2024年中国新型墙体材料市场调查研究报告
- 2024年热压氮化硼制品项目成效分析报告
- 2024年聚苯硫醚(PPS)及合金项目综合评估报告
- 2024年软膏剂机械项目评价分析报告
- GB/T 17892-2024优质小麦
- 南京市2024-2025学年六年级上学期11月期中调研数学试卷二(有答案)
- 江苏省镇江市第二中学2023-2024学年高二上学期期中考试数学试卷(无答案)
- 2023-2024学年全国初一下生物人教版期末考试试卷(含答案解析)
- 2024年甘肃省陇南市武都区人民法院招聘18人历年高频难、易错点500题模拟试题附带答案详解
- 2024至2030年中国自动车配件行业投资前景及策略咨询研究报告
- 2024-2030年中国虚拟专用网络(VPN)行业市场行业发展分析及发展前景研究报告
- 检验检测机构内审员检查表
- 2024中煤电力限公司面向中煤集团内部招聘15人高频难、易错点500题模拟试题附带答案详解
- 统编版(2024新版)七年级上册历史第二单元 夏商周时期:奴隶制王朝的更替和向封建社会的过渡 单元复习课件
- 高危儿规范化健康管理专家共识解读
评论
0/150
提交评论