讲-简单程序设计_第1页
讲-简单程序设计_第2页
讲-简单程序设计_第3页
讲-简单程序设计_第4页
讲-简单程序设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6讲简单程序设计1.一、程序开发过程三个过程:1、预编译:预编译程序负责处理组成程序的各个源文件和头文件的预编译指令,如#include、#define,将带有预编译指令的程序文件转化为纯粹的C++程序文件。头文件的内容被插入到源程序文件中。2、编译:编译程序将C++源程序翻译成对应的二进制代码,即二进制机器语言,扩展名为.obj3、连接:连接程序将组成程序的所有.obj文件和用到的库文件连接起来,形成一个完整的可执行文件;程序的编译以文件为单位进行。当程序由多个文件构成时,若对其中的一个文件的代码进行了修改,则只需编译该文件,而无需编译所有文件;可执行文件头文件头文件头文件源文件源文件源文件配置文件预编译编译连接C++程序开发过程2.二、文件之间的信息共享解决程序由多个文件组成时,多个文件间如何共享问题引入外部变量和外部函数外部变量在变量名前加关键字extern说明为外部变量编译器看到extern时,说明extern后定义的变量不在本文件中定义,而在其它文件中定义//main.cpp#include<iostream.h>intx;void

main(){......}//file.cppextern

intx;void

func(){cout<<x;x=5;...}....3.注意事项:当文件中出现了一个extern变量说明时,必须保证组成同一程序的其它文件中有且只有一个对该变量的定义//main.cppintx;inty;void

main(){...}...//file1.cppextern

intx;inty;void

func1(){...}...//file2.cppextern

intx;extern

inty;extern

intz;void

func2(){...}...4.若在说明一个变量时加上了对变量的初始化,编译器会当成变量定义,而不当成变量说明来使用;如:externintx=10;编译器会忽略前面的extern,而将其当成是对变量x的定义extern说明的变量必须是具有全局作用域,不能是函数的局部变量;5.2外部函数外部函数没有局部函数和全局函数之分,C++中函数默认是extern当编译器看到函数的原型后,就认为在程序的某个文件将能找到该函数的定义,所以允许在说明这个函数原型的文件中使用该函数使用方法:在文件file1.cpp中定义如下:int

max(intx,inty){

return(x>y?x:y);}另一个文件中要使用,只需说明函数原型int

max(int,int);等价于:extern

int

max(int,int);6.//main.cppvoid

print(char*);void

main(){print("Hello,friend\n");...}//file1.cpp#include<iostream.h>void

print(char*str){

cout<<str; ...}函数默认是extern,一般只要直接说明函数原型,就可以使用了7.3.静态全局变量与静态函数若不希望在一个文件中定义的某些变量或函数在其它文件中使用时,可定义为静态的(static),如:staticintx;staticintmax(int,int);使用static全局变量和static函数优点:可将一些文件的实现细节封装起来,这些实现细节无需其它文件了解,安全切简化了文件之间的接口;不同文件可以使用相同名称的变量和函数完成文件功能,而不用担心名字冲突;内联函数默认是静态函数,只在定义范围内有效用const定义的常量也具有静态性,可在不同的文件中定义同名的常量;8./*=====文件main.cpp======*/#include<iostream.h>intcompare(int,int);floatcompare(float,float);voidmain(){ cout<<compare(13,4)<<endl; cout<<compare(2.3f,4.5f)<<endl;}/*=======file1.cpp=======*/staticintmax(int,int);intcompare(intval1,intval2){ if(val1==val2) return0; if(max(val1,val2)==val1)return1; else return-1;}intmax(inti,intj){ return(i>j)?i:j;}/*=====file2.cpp=======*/staticfloatmax(float,float);floatcompare(floatval1,floatval2){ if(val1==val2) return0; if(max(val1,val2)==val1)return1; else return-1;}floatmax(floati,floatj){ return(i>j)?i:j;}9.//main.cppexterninta;staticintb=3;externintsfunc(int)voidmain(){ inti=b; a=func(i); a=sfunc(i);}//文件func1.cppexternintb1intfunc(inti){ return(i*b);}staticintsfunc(inti){ return(i*b);}10.三、头文件#include<文件名>#include"文件名"#include指令可以嵌套,可在一个头文件中再有#include指令头文件包含内容的标准内容是否可能要被多个文件使用,若只有一个文件内容要使用,可直接将信息放到源文件中若多个文件包含这个头文件,是否会引起冲突.若会引起冲突,则这样的信息就不要放到头文件中,如全局变量的定义,函数的定义;11./*math.h*///预编译指令#ifndef_INC_MATH#define_INC_MATH//结构定义struct_complex{ doublex,y;};//常量定义#define_DOMAIN1#define_SING2#define_OVERFLOW3//函数原型声明int__cdec1abs(int);double__cdec1acos(double);double__cdec1asin(double);//外部变量说明externdoubleHUGE;//内联函数定义inlinelongdoubleasco1(longdouble_X){ return(acos((double)_X));}inlinelongdoubleasin1(longdouble_X){ return(asin((double)_X)); }#endif/*_INC_MATH*/12.C++头文件一般包含的内容预编译指令#define,#ifdef,#endif,#include函数声明:intcalculate(int,int)内联函数定义:inlinefloatmin(float,float)类型定义:struct,enum,class,typedef...外部数据说明:externinti;externcharname[];常量定义:constintPI=3.1415926;注释也可包含入下内容全局变量定义静态函数和静态变量定义一般函数定义类的成员函数的定义13.预编译指令条件编译指令#if、#else、#elif、#endif、#ifdef、#ifndef和C++中的if语句类似预编译器可根据条件决定保留或不保留程序文件中的某些内容如:#ifndef_INC_MATH#define_INC_MATH...#endif/*_INC_MATH*/#ifndef_PI_#define_PI_constfloatPI=3.1415926#endif/*_PI_*/14.#define指令通常用来与条件编译指令配套使用,定义与否可用ifdef或ifndef来测试;入:#define_NAME#ifdef_NAME#ifndef_NAME15.//main.cpp#include"func1.h"#include"func2.h"voidmain(){ abs(-4); acompare(3,-4);}//func1.cpp#include"func1.h"intabs(inti){ return(i>=0?i:-i);}//func1.h#ifndef_FUNC1_#define_FUNC1_intabs(int);#endif//func2.cpp#include"func2.h"intacompare(inti,intj){ returnabs(i)-abs(j);}//func2.h#ifndef_FUNC2_#define_FUNC2_#include"func1.h"intacompare(inti,intj);#endif//func1.cpp#include"func1.h"intabs(inti){ return(i>=0?i:-i);}//func1.h#ifndef_FUNC1_#define_FUNC1_intabs(int);#endif//func1.cppintabs(int);intabs(inti){return(i>=0)?i:-i;}//func2.cpp#include"func2.h"intacompare(inti,intj){ returnabs(i)-abs(j);}//func2.h#ifndef_FUNC2_#define_FUNC2_#include"func1.h"intacompare(inti,intj);#endif//func2.cppintabs(int);intacompare(inti,intj);intacompare(inti,intj){returnabs(i)–abs(j);}//main.cppintabs(int);intacompare(inti,intj);voidmain(){abs(-4);acompare(3,-4);}16.四、生存期标识符在程序运行过程中生存的时间,如:ex6.1int*pGlobal;void

func1();void

func2();void

main(){

func1();

func2();}void

func1(){

intx; pGlobal=

new

int;}void

func2(){

inty;

deletepGlobal;}17.生存期与内存内存空间分为:四个区,不同生存期的变量存放的内存区域不同代码区:全局数据区:大小在程序开始运行前就已确定,存放具有静态生存期的变量,包括全局变量、静态全局变量机、静态局部变量等;堆区:动态申请的空间在堆中分配,具有动态生存期的变量空间处于内存堆中。栈区:同样,具有局部生存期的变量存放到栈区中;具有静态生存期的变量由系统自动初始化为0,而系统不对局部生存期和动态生存期的变量进行初始化;18.#include<iostream.h>inti;void

main(){

intj;

cout<<"Globalvariablei="<<i<<endl;

cout<<"Localvariablej="<<j<<endl;}Globalvariablei=0Localvariablej=200872002419.静态局部变量函数的局部变量具有局部生存期,每次函数结束后,其局部状态信

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论