C++程序设计:第一讲 绪论

上传人:工**** 文档编号:569751614 上传时间:2024-07-30 格式:PPT 页数:29 大小:706.50KB
返回 下载 相关 举报
C++程序设计:第一讲 绪论_第1页
第1页 / 共29页
C++程序设计:第一讲 绪论_第2页
第2页 / 共29页
C++程序设计:第一讲 绪论_第3页
第3页 / 共29页
C++程序设计:第一讲 绪论_第4页
第4页 / 共29页
C++程序设计:第一讲 绪论_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《C++程序设计:第一讲 绪论》由会员分享,可在线阅读,更多相关《C++程序设计:第一讲 绪论(29页珍藏版)》请在金锄头文库上搜索。

1、2024/7/301面向对象程序设计 C+语言基础 2024/7/302第一讲 绪论 程序设计语言程序设计语言表达软件的工具表达软件的工具 计算机不是一台真正的机器 程序一种软件机器。这种机器的建造依赖于工具、材料和想象 力之间的相互作用,程序设计语言定义了工具和材料。 数学模型(形式化描述)比程序设计语言更重要。 程序设计语言的发展程序设计语言的发展 硬件发展软件危机结构化程序设计软件工程面向对象技术 机器码低级高级;编译程序编译程序(如如C+Builder)操作系统操作系统 (如如Linux)数据库系统数据库系统( 如如Oracle)系统工具软件(如系统工具软件(如Word)领域应用软件领

2、域应用软件2024/7/303 结构化过程和面向对象编程 结构化程序设计:结构化程序设计: 总体结构层次树状;局部组织模块化。一般不允许goto. 程序处理数据的一系列过程; 数据,过程分开存储; “分而治之”。 缺点:数据和任务分离,难理解、维护; 重用性差;软件开发的瀑布模型:软件开发的瀑布模型: 六个阶段: 软件计划可行性分析、工作范围和代价; 需求分析(做什么)功能需求、性能需求、环境需求与限制; 软件设计(怎么做)概要设计和详细设计; 软件编码用具体语言实现设计; 软件测试单元测试和综合测试; 软件维护已交付的软件修改、扩充、排错;2024/7/304 面向对象程序设计面向对象程序设

3、计: 菜单、按钮、窗口菜单、按钮、窗口事件驱动;事件驱动; 数据和数据处理过程数据和数据处理过程对象;对象; 面向对象的四大支柱:封装、数据隐藏、继承和多态性。面向对象的四大支柱:封装、数据隐藏、继承和多态性。 C C语言贝尔实验室的语言贝尔实验室的 Dennis Ritchie Dennis Ritchie 开发的,开发的,19721972年在一台年在一台DECDEC PDP-11 PDP-11实现。实现。UNIXUNIX系统的开发语言。系统的开发语言。 满足复杂性要求,满足复杂性要求,19801980年年 贝尔实验室的贝尔实验室的 Bjame Stroustrup Bjame Strous

4、trup 开发带开发带类的类的C C。19831983年正式取名年正式取名C+C+。2024/7/305C+程序的结构nC+应用程序的结构n简单的C+程序nC+源程序的执行2024/7/306 C+应用程序的结构老师类老师类 学生类学生类 张三张三 李四李四 王萍王萍 赵英赵英 类对象类对象陈老师陈老师 实例对象实例对象 C+程序是一组相互通信的对象程序是一组相互通信的对象main主控对象主控对象C+C+应用程序设计:应用程序设计:1.定义应用需要的类对象;2.定义主控对象,完成对象间的通信;2024/7/307 简单的简单的C+C+程序程序 # include int main( ) cou

5、t“Hello, Worldn”; 一般: 公用数据和函数说明放在头文件(.h)中; 实现函数功能的函数体和局部数据放在源文件(.cc)中; 程序是由一行行符号序列表达的,空格将符号序列分为六类: 关键字:include, int, const等说明语句、数据的性质; 标识符:cin, cout, a, b等代表运算对象; 运算符:b)?a:b; 含义?含义?C #include f(a,b) char *a; float b; printf(“a:%s,b:%fn”,a,b); main( ) f(12.3,12.3); C+ #include f(char *a, float b) cou

6、t“a:”a“,” “b”bendl; void main( ) f(12.3, 12.3); ? 4 函数 C+ C+与与 C C不同之处是声明使用原型,以保证实参和形参类型一致(编译器检查)不同之处是声明使用原型,以保证实参和形参类型一致(编译器检查)2024/7/3015 ex 5. Char *pChar; pChar=new char; char *string=new char25; / delete pChar; delete string;new和和delete运算符和运算符和C中的中的malloc和和free函数的区别:函数的区别:new运算符根据对象的类型,自动决定其大小,

7、而malloc要指定分配存储空间的大小;new返回指向此类型的指针,malloc返回指向void*类型的指针。 每种运算符只能用于特定的对象: ex 6. int i; ex 6. int i; *i=10; ? *i=10; ? ex 7. 12.3%3 ? ex 7. 12.3%3 ? 12.32 12.32 ? : 是作用域分辨符,用它可以访问隐藏的全局变量。2024/7/3016 程序的结构整个程序整个程序.C文件文件1.C文件文件n函数函数1函数函数k函数函数1函数函数l全局变量局部变量静态变量工程文件(.dsw, .prj): 告诉编译器可执行文件由哪些.c文件装成; 连上哪些.o

8、bj文件; 要连的标准库.lib2024/7/3017 程序运行时的内存占用栈区(栈区(stack area)堆区(堆区(heap area)数据区(数据区(data area)代码区(代码区(code area)存放程序的代码部分存放程序的全局数据和静态数据存放程序动态申请的数据存放程序的局部数据和参数2024/7/3018#includeint m=80;void F1(int w) static int n=70; int k=60; /1 m+; n+; k+; w+; /2 printf(“F1( )-m:%d n:%d k:%d w:%dn”,m,n,k,w);void F2( )

9、 int m=90; m+; /4 F1(m); printf(“F2( )-m:%d n”,m);void main( ) int w=20; F1(w); /3 printf(“下面调用下面调用F2( )n”); F2( ); k 60w 20w 20未用未用m 80F1的的n 70main、F1、F2代码代码数据区代码区栈区堆区栈顶F1maink 61w 21w 20未用未用m 81F1的的n 71main、F1、F2代码代码数据区代码区栈区堆区栈顶F1maink 61w 21w 20未用未用m 81F1的的n 71main、F1、F2代码代码数据区代码区栈区堆区main栈顶k 61m

10、91w 20未用未用m 81F1的的n 71main、F1、F2代码代码数据区代码区栈区堆区main栈顶F2k 61w 91m 91w 20未用未用m 81F1的的n 71main、F1、F2代码代码数据区代码区栈区堆区main栈顶F2F12024/7/3019 流程控制、函数和文件1 1 流程控制语句(顺序、条件、循环)流程控制语句(顺序、条件、循环) 条件语句条件语句 (if-else; switch)(if-else; switch) 注意:条件表达式的值为非零表示“真”;值为零则表示“假”。 C+无布尔类型; ex 1. switch(val) case 1: cout“case 1”

11、endl; case 2: cout“case 2”endl; default: cout“case not found”endl; 若若valval为为1 1,输出结果?,输出结果? 循环语句循环语句 (while; for)(while; for) for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3 3) 语句语句表达式表达式1 1;While(While(表达式表达式2) 2) 语句语句; ; 表达式表达式3;3; 2024/7/3020C+函数作用:1、大任务化小时,表示小任务; 2、定义方法。文件是编译的独立单位函数和文件函数和文件 1 1 作用域作用域 标识

12、符的作用域有:块、函数、文件、全局块、函数、文件、全局 4种 在块和函数内声明的变量作用域是块和函数; 在函数外声明的静态全局变量作用域是定义它的文件; 全局名的作用域整个程序。 ex 2. int x; void f1( ) int x; x=1; int x; x=2; x=3; int *p=&x; 2024/7/30212 2 存储分类符存储分类符 外层作用域不能访问内层作用域,利用外层作用域不能访问内层作用域,利用:运算符可访问当前作用域所隐藏的全局名。运算符可访问当前作用域所隐藏的全局名。但不能访问隐藏的局部名。作用域总是始于说明点。但不能访问隐藏的局部名。作用域总是始于说明点。

13、ex 3. int x=11; void f2( int z ) int z; int y=x; int x=1; :x=2; y=x; 外部的外部的:多个文件共享的变量,用extern通知编译器同名同类型变量引用同一存储区。 ex 4. /file1.cc /file2.cc int a=1; extern int a; / 声明声明 int f ( ) int f( ); / 声明(将名字与类型联系起来)声明(将名字与类型联系起来) void g( ) / a=f( ); 2024/7/3022 静态的静态的:分配的存储空间直到整个程序结束才收回(全局变量特性); 局部于某一作用域(局部变

14、量特性) 按作用范围可分:静态局部变量,局限于特定函数,但出作用域并不释放。 静态全局变量,局限于它的源文件。 ex 5. #include void f ( ); void main ( ) for ( int i=0; i=3; i+) f ( ); 输出结果输出结果? void f ( ) static int a=0; couta+endl; 函数也可以声明为静态的,局部于它所在的文件。 ex 6. /file1.cc static void f ( char ) /file2.cc static void f ( char ) /若去掉若去掉static? 寄存器的寄存器的:用CPU

15、中寄存器提高频繁使用量的速度。 自动的自动的:函数的局部变量,出函数自动消失,一般省去auto。2024/7/3023 3 3 函数参数传递函数参数传递 ex 7. #inlcude void swap ( int x, int y ) int temp; temp=x; x=y; y=temp; void main ( ) int x=10, y=20; swap( x, y ); cout“x:”x“y:”yendl; 结果?结果? ex 8. #inlcude #inlcude void swap ( int *x, int *y ) void swap ( int &x, int &y

16、 ) int temp; int temp; temp=*x; temp=x; *x=*y; x=y; *y=temp; y=temp; void main ( ) void main ( ) 结果?结果? int x=10, y=20; int x=10, y=20; swap( &x, &y ); swap( x, y ); cout“x:”x“y:”yendl; cout“x:”x“y:”yendl; 参数传值是参数参数传值是参数值的拷贝,而不值的拷贝,而不是参数本身。是参数本身。函数要改变调用它的函函数要改变调用它的函数的变量有两种方法:数的变量有两种方法:传指针调用传指针调用和和引用

17、调用引用调用。当形参和实参结合时,当形参和实参结合时,复制的是变量的地址。复制的是变量的地址。2024/7/30244 4 函数参数函数参数 void f1(int a, int b=-1); 调用形式:调用形式:f1(1,2); f1(2); void f2(int a, int b=-1, int c); ? main( )是编译器预定义的函数,是编译器预定义的函数,C+有两种形式:有两种形式: int main( ) /* */ int main( int argc, char *argv ) /* */ argv 0 argv argc-1 存放运行环境参数。存放运行环境参数。 ex

18、9. #inlcude int main ( int argc, char *argv ) if (argc !=2) cout“you forgot type parameter”endl; exit(1); cout argv1endl; return 0; namepr otherotherpryou forgot type parameter编译后执行结果:编译后执行结果:pr name2024/7/3025 内联、重载和引用内联、重载和引用 1 1 宏和内联宏和内联 文件包含:#include /包含文件内容取代该预处理语句? 宏定义:#define #define 字符串字符串1

19、1 字符串字符串2 2 /预编译时,将字符串1一律用字符串2替换 带参宏:例如,#define power(x) (x)*(x)#define power(x) (x)*(x) 使用,x=4;y=6; z=power(x+y)x=4;y=6; z=power(x+y) 条件编译: #if #if 条件条件 源程序部分源程序部分1 1 #else #else 源程序部分源程序部分2 2 #endif #endif /编译时,根据条件决定取哪部分编译 在C+中常用const变量和内联函数来代替宏和带参宏: 例如:const int YES=1; /这种定义有类型信息,更安全2024/7/3026

20、inline fac(int i) return i2 ? 1:n*fac(n-1); inline fac(int i) return i2 ? 1:n*fac(n-1); 编译器在所有调用这个函数的地方将其实际的代码装上。内联函数要出现在每一调用该函数的源文件之中,所以一般放在头文件中。内联函数调用,编译器做类型检查,保证非法类型不传入;宏的优点是传入什么类型,返回同一类型。文件1文件2文件minline fac(int i)inline fac(int i)fac(int i)fac(int i)fac(int i)fac(int i).h文件文件1文件2文件mfac(int i)fac

21、(int i)fac(int i)fac(int i)fac(int i)fac(int i).h文件inline fac(int i)inline fac(int i)2024/7/3027 2 2 重载函数重载函数 C中求绝对值的函数: int iabs(int I); long labs(long l); double fabs(double d); C+ C+用同一个函数名用同一个函数名 abs( )abs( )实现上面,用函数参数来区别到底调用哪个函数。所以把实现上面,用函数参数来区别到底调用哪个函数。所以把同一同一作用域内名字相同作用域内名字相同,但参数不同但参数不同的函数称为重载

22、函数。这得益于函数原型不仅给出函数名,的函数称为重载函数。这得益于函数原型不仅给出函数名,而且指出了参数类型。而且指出了参数类型。 为了保证编译器根据参数类型识别重载函数,必须保证重载函数的参数不同。为了保证编译器根据参数类型识别重载函数,必须保证重载函数的参数不同。 1、同名函数,仅返回值类型不同,但参数相同; 2、两同名函数,仅用const或引用使参数类型有所不同; ex 10. int print (const int & ); int print (int ); 3、加修饰符使参数有所不同,取决于实参的具体类型; ex 11. void print (unsigned int ); v

23、oid print (int ); / print (1l); /出错出错 print (1u); /正确正确4、缺省参数有时也能导致二义性; ex 12. void print ( int a, int b=1 ); void print (int a); / print(1); /二义性二义性 以下几种可能出现二义性:2024/7/3028 3 3 函数、引用和常量函数、引用和常量 引用可作参数,也可作函数返回值,例如: int & getIndex( ); /返回一整型变量的引用 所以函数调用getIndex与一整型变量引用同一存储区域(即是这一变量的别名)。 ex 13. int In

24、dex=0; int & getIndex( ); return Index; void main( ) int n; n=getIndex( ); getIndex( )=5; +getIndex( ); 注意:注意:函数所引用的变量在函数调用返回后必须是存在,因此,不能返回自动函数所引用的变量在函数调用返回后必须是存在,因此,不能返回自动 变量或参数。变量或参数。由于常量不分配空间,所以也不能返回常量,由于常量不分配空间,所以也不能返回常量,但用但用constconst声明时,返回常量却是合法的声明时,返回常量却是合法的一般可安全返回全局变量、静态变量。一般可安全返回全局变量、静态变量。2024/7/3029 ex 14. int & bardIdea1( ) int & barIdea2( int parm) int i; return parm; return i; 虽然这两个程序编译不会出错,但结果难以预料 ex 15. int & bardIdea3( ) const int& bardIdea4( ) return 1; return 1; bardIdea3( ) 出错。而编译器会创建临时的const int变量,去初始化bardIdea4( )

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

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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