面向对象的设计与分析课件.ppt

上传人:max****ui 文档编号:3286550 上传时间:2019-12-11 格式:PPT 页数:83 大小:512.50KB
返回 下载 相关 举报
面向对象的设计与分析课件.ppt_第1页
第1页 / 共83页
面向对象的设计与分析课件.ppt_第2页
第2页 / 共83页
面向对象的设计与分析课件.ppt_第3页
第3页 / 共83页
点击查看更多>>
资源描述
第2章C+语言基础,本章的学习目的面向对象技术的思想方法最早起源于面向对象编程语言。最典型和流行的面向对象编程语言C+提供了支持面向对象技术的最充分的机制。因此通过学习C+,我们能够获得对面向对象的基本概念和思想方法的深刻理解。所以在初步了解面向对象的基本概念和思想方法的基础上,有必要先学习一下C+,以加深对面向对象的基本概念和思想方法的理解,为进一步学习面向对象的系统分析和设计作好充分准备。,本章的学习内容了解C+程序基本结构了解C+数据类型、运算符及表达式了解和掌握程序流程控制基本语句了解和掌握函数的定义和调用方法,2.1C+程序的基本结构2.1.1C+程序示例【例2.1】一个简单的C+程序/输入一个学生的三门课成绩,计算其加权平均值#include/预处理指令/子函数的引用说明doubleAverage(doublescore1,doublescore2,doublescore3);voidmain()/程序的主函数doublescore1,score2,score3,average;coutscore1;/接受用户输入coutscore2;coutscore3;/调用子函数,用返回值为变量赋值average=Average(score1,score2,score3);cout加权平均分为:averageyear=pd-year+1;,(2)结构体变量整体的赋值运算day2=day1;(3)不允许将两个结构体变量做整体比较,只能逐个成员比较。例如:if(day1=day2);/错误if(day1.year=day2.year,5.条件运算符条件运算符的语法形式如下:expr1?expr2:expr3;在执行该语句时,先无条件计算表达式expr1;若表达式expr1的计算结果为真(任意非零值),则计算表达式expr2;否则计算表达式expr3。6.自增、自减运算符自增运算符+和自减运算符-主要用在循环语句中,为循环控制变量提供格式紧缩的加1和减1运算。例如:,7.位运算符在计算机中,数据是用二进制来进行存储的,任何一种类型的数据都可以转化为一定位数的二进制符号,即用按一定顺序排列的0和1表示。C+中提供了六个位运算符如表2.7所示。,表2.7C+中的位运算符,sizeof运算符sizeof运算符返回一种数据类型的字节长度时,格式为:sizeof(type-specifier)如:sizeof(double)当需要返回一个变量的字节长度时,可采用如下两种形式中的任一种:sizeof(variable)如:intvar;sizeof(var);sizeofvariable如:intvar;sizeofvar;,2.2.4.2C+表达式表达式是由运算符和操作数组成的式子。操作数包括常量、变量、函数和其他一些命名的标识符。表达式可以分为:算术表达式关系表达式逻辑表达式条件表达式赋值表达式逗号表达式,表2-3表达式的分类,2019/12/11,程序运行时需要占用多大的空间需要在编译时确定,便于操作系统为程序分配适当的内存空间。从静态存储区分配:程序的全局变量和静态变量都在这里分配,且在编译时已经分配好,在程序终止前被操作系统回收。在栈上创建:在函数调用时,函数的形参和局部变量都在栈上创建,函数执行完毕时这些内存自动被释放掉。从堆(heap)上分配:在程序运行期间,用动态存储分配函数申请和释放的内存,程序中变量的内存分配方式,2019/12/11,由动态内存管理系统管理的这块内存区域叫做“堆(heap)”:当需要动态灵活地分配内存空间时,需要用到动态存储分配动态分配得到的内存块位于堆中,且没有名字动态存储分配由库函数malloc.h提供格式:p=(double*)malloc(n*sizeof(double)C+中动态存储分配由运算符new和delete实现new和delete完成动态存储分配时,可以很好地和构造函数、析构函数进行交互,malloc和free不能自行调用构造函数和析构函数,动态存储分配,2.2.5动态存储分配(一),1.new运算符三种常用格式:格式1:=new功能:分配一块与相适应的存储空间,若分配成功,将这块内存空间的首地址存入指针变量,否则置指针变量的值为NULL(空指针值,即0)。,2.2.5动态存储分配(二),格式2:=new()功能:分配一块与相适应的存储空间,并用为分配好的存储空间置初值。若分配成功,将这块内存空间的首地址存入指针变量,否则置指针变量的值为NULL(空指针值,即0)。例如:int*p;p=newint(100);/动态存储分配一个整数单元,并给它赋初值100。,2.2.5动态存储分配(三),格式3:=new功能:申请大小为的数组空间。但创建数组时,不能为该数组指定初始值。例如:int*p;p=newint10;/动态分配一个含有10个整数的数组。,2.2.5动态存储分配(四),1.delete运算符二种常用格式:格式1:delete功能:释放指向的动态存储空间。例如:deletep;,2.2.5动态存储分配(五),格式2:delete功能:用于释放数组占用的动态存储空间。例如:int*p;p=newint10;deletep;,例2-7用new申请数组空间#include#includevoidmain()int*array;if(array=newint10)=NULL)cout“Cantallocatememory,terminating”;exit(1);for(intcount=0;count10;count+)arraycount=count*2;coutarraycount“”;couty)coutxelsecouty(4)循环语句。例如,for(n=1;n100;n+)s=s+n;(5)跳转语句。例如,break(6)复合语句。switch(chr)cases:cout“*您选择的是学生信息:”n;break;caset:cout“*您选择的是教师信息:”x1;x2=average(90,80,70)+x1;printf(“%d”,x2);2分支结构按照条件判断有选择地执行某个程序段的语句。例如,if(xy)coutxelsecouty)coutxendl;elsecoutychr;/输入选择字符switch(chr)/switch开关控制cases:/当选择学生信息时cout“*您选择的是学生信息:”n;break;caset:/当选择教师信息时cout“*您选择的是教师信息:”n;break;casew:/当选择工人信息时cout“*您选择的是工人信息:”n;break;default:/当选择其他时cout*感谢您的使用,再见!n;pt=false;,运行结果:选择信息种类(S-学生;T-教师;W-工人;Q-退出):s*您选择的是学生信息:选择信息种类(S-学生;T-教师;W-工人;Q-退出):t*您选择的是教师信息:选择信息种类(S-学生;T-教师;W-工人;Q-退出):w*您选择的是工人信息:选择信息种类(S-学生;T-教师;W-工人;Q-退出):q*感谢您的使用,再见!,2.continue语句continue语句也常用于循环控制和开关分支控制内,但其作用与break语句有所不同:continue语句仅使所在层的本次循环终止执行;而break语句则终止所在层的整个循环的执行。在for循环,while循环和do循环中,continue语句的出现导致程序的执行转回对循环条件的判断。在各种循环体中,常需要根据不同的需要选择合适的break或continue语句,使程序的流程与设计意图相符。,n=1;while(nab;c=max(a,b);couty)returnx;elsereturny;,2.4.2函数调用在调用子函数时,主函数与被调用子函数之间的数据传递一般依靠子函数的参数进行。根据实参与形参之间数据传递方式的不同,可以把函数调用分为:传值调用传地址调用引用调用,1.传值调用传值调用先计算出实参表达式的值,再将实参的值依次复制给形参。在被调用函数的执行过程中,形参值的改变不会影响实参的值,即数据的传递是单向的。形参是函数中的局部变量,具有独立的存储空间。例:intf(intx,inty)voidmain()inta=1,b=2,c;c=f(a,b);,#includevoidswap(intx,inty)inttemp;temp=x;x=y;y=temp;voidmain()inta=1,b=2;cout“Beforeswapa=”a“,b=”bendl;swap(a,b);cout“Afterswapa=”a“,b=”bendl;运行结果:Beforeswapa=1,b=2Afterswapa=1,b=2,2.传地址调用在传地址调用方式中,形参用指针变量实现,实参用地址值。调用时,将实参地址赋给对应的形参指针变量,使形参指针指向实参。故在被调用函数中可通过形参指针对实参进行间接读或写。,例:voidf(int*x,int*y)voidmain()inta=1,b=2;f(,例2-9传地址调用举例#includevoidswap(int*x,int*y)inttemp;temp=*x;*x=*y;*y=temp;voidmain()inta=1,b=2;cout“Beforeswap”a“,b”bab;cout“Themaxis:”max(a,b)0?x:-x;longabs(longx)returnx0?x:-x;,voidmain()intx1=4;doublex2=5.5;longx3=6L;cout“|x1|=”abs(x1)endl;cout“|x2|=”abs(x2)endl;cout“|x3|=”abs(x3)endl;运行结果:|x1|=4|x2|=5.5|x3|=6,2.4.6作用域1.作用域在一个函数体中定义的变量,在这个函数体执行完之后分配给它的内存单元就被释放了,因此离开该函数就不能再使用了该变量了,成为无效的变量了。即这个变量仅在这个函数体内有效,其有效性的范围就是这个函数体。一般地,变量有效性的范围称为变量的作用域。C+语言中的所有量都有自己的作用域。作用域分为:局部作用域(块作用域)、函数原型作用域、文件作用域和类作用域。,(1)局部作用域一个变量在一个函数体内或复合语句块内定义时,它具有块作用域,其作用域是从定义点开始,直到该块结束为止。例如:voidmain()inti;for(i=1;i4;i+)intj=5;/j的作用域开始j+;coutj“”;/j的作用域结束coutj;,(2)函数作用域在每个函数中使用的语句标号是唯一具有函数作用域的标识符。它在本函数中有效,供本函数的goto语句跳转使用。由于语句标号不是变量,故函数作用域不属于变量的一种作用域。intsum(intn)inti=1,s=0;Loop:s=s+i;if(i=n)gotoLoop;returns;,(3)函数原型作用域函数原型声明中的参数的作用域开始于函数原型声明的左括号,结束于函数原型声明的右括号。要在原型声明之外使用参数必须另外定义,否则出现无定义的标识符。例如:doubleAverage(doublex,doubley,doublez);/原型声明x=90;/errorx无定义voidmain();doubleAverage(doublex,doubley,doublez)/函数定义returnx+y+z;,(4)文件作用域在一个程序文件中,如果一个变量定义在所有函数之外,并且定义时带有关键字static,则该变量在整个文件中有效。它具有文件作用域,但在其他文件中无效。例如:/program1staticintvalue;intsum()value=0;voidmain()value=2*sum();,2.局部变量和全局变量从变量的作用域来分,可以将变量分为全局变量和局部变量。(1)全局变量在一个程序中,当一个变量定义在所有文件的函数之前,它可用于任何一个函数,则该变量称为全局变量。全局变量具有全局作用域,该变量在一个程序包括的所有文件中都有效,它可以被程序中的所有函数使用。例如:/P0.hintg;/P1.cpp#include“P0.h”/P2.cpp#include“P0.h”,(2)局部变量在一个语句块或函数内定义的变量其作用域仅限于该语句块或函数,离开该语句块或函数之后它就无效。这种变量称为局部变量。局部变量的类型修饰符是auto,习惯上都省略。若在局部变量定义前面加上关键字static,则称为静态变量,若静态变量没有被初始化,则编译时会被自动初始化为0。静态变量在整个程序的运行期间都是存在的,但其作用域是局部的。,例2-13变量的作用域和生存期#includevoidf1();inta=1,b=2;staticintc;a+;b+;c+;coutabcendl;voidmain()inta=1,b=2,c=3;f1();f1();f1();coutabcx;cout:ostream类对象,用于处理标准输出,它将输出流中的数据发送到标准输出设备(通常是显示器)上,并在标准输出设备上进行显示。例如:cout“输出变量的值:”x;,作业,习题:书面习题:教材中第126128面的习题3、4、9、10、13;第162163面的习题3、5、6上机习题:教材中第128面的习题10、第163面的习题5,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!