《Visual C++面向对象编程》复习纲要 - 2014.docx
《《Visual C++面向对象编程》复习纲要 - 2014.docx》由会员分享,可在线阅读,更多相关《《Visual C++面向对象编程》复习纲要 - 2014.docx(90页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象程序设计(VC+)复习纲要考试时间:第16周星期五56节考试地点:二教404第1章 Visual C+集成开发环境第2章 C+语言基础2-1 C+的变量和表达式C+的变量在被引用之前必须被定义;可以在程序中随时定义;但不允许重复定义一个变量;变量定义后若没有被初始化,则这个变量中的值是随机的。2-1-1 设有语句char s=”abc0endl”; int m=sizeof(s),n=strlen(s);则m、n的值分别为9和3,请问为什么?sizeof连“/0”都计算;strlen遇到”/0”停止;2-1-2 C+语言中数组元素的访问方式有两种,即:下标方式和指针方式 。 2-1-3
2、 设有int a,b;执行语句:b=(a=2+3,a*4),a+5;后,a+b的值是多少?252-1-4 已知有定义 “int x, a =15,17,19, *pa=a;”,在执行“x=*pa+;”后,*pa的值是17,为什么?地址2-2 C+数据类型2-2-1 设pointer1和pointer2是指向同一个int型一维数组的指针变量,i为int型变量,语句 pointer2=i是否正确? 正确 基类型相同2-3 控制语句2-3-1 语句if(w) ; else ; 中的表达式w的等价表示是什么?我!=02-3-2 for循环for(int i(0),j(10);i=j=4;i+,j- -
3、)的循环体执行多少次?2-3-3 break和continue语句的作用。BreaK终止整个循环continue结束本次循环2-3-4 switch语句switch后面的表达式一般只能是整型、字符型或枚举型;每一个常量表达式的值都是唯一的;default是可选项;case后面的语句可以不要花括号;如果switch中只有一个case常量表达式,则可以省略花括号。2-4 函数定义、函数声明和函数调用使用函数之前,首先要定义该函数。编写一个实现特定功能的函数代码就称为函数定义。 函数定义的一般形式是: ()存储类型:static、extern,默认extern; 函数类型:函数返回值的类型,默认in
4、t; 函数名:定义函数的名称; 形参表:用逗号分隔的变量声明列表; 函数体:一系列语句,用于实现函数的功能。所谓函数调用是指执行一个函数的函数体代码。调用某个函数的函数称为主调函数,被调用的函数称为被调函数。函数调用的语法形式为: (实参1,实参2,实参n)C+允许函数调用在前,函数定义在后,但此时要求在函数调用前必须先进行函数的声明,以告诉编译器该函数是在其它地方定义的。函数声明的一般形式如下: ();2-5 设函数int min(int, int)返回两参数中最小值,利用此函数求三个整数的最小值2-6 C+函数参数的传递方式C+函数参数的传递方式有三种:值传递、按地址传递和引用传递。值传递
5、是一种单向的参数传递方式,即只把实参的值传递给形参,形参值的变化不影响实参。例2-16实参与形参的值传递。调用函数后,实参a、b的值并没有发生改变。 #include void swap(int x, int y)/函数定义 cout x=x y=yendl;int temp = x;/交换形参x和y x = y;y = temp;coutafter swap:endl;cout x=x y=yendl;main()int a = 20, b = 40;coutbefore swap:endl;cout a=a b=bendl;swap(a, b);/函数调用 cout a=a b=bendl
6、; 按地址传递方式,函数定义以指针作为函数的形参,函数调用的实参必须是指针变量或变量的地址,形参的任何变化都将影响实参。例2-17实参与形参按地址传递,以指针作为函数参数。 #include void swap(int*, int*);/ 函数声明 main( )int a = 20, b = 40;swap(&a, &b);/ 地址作为函数实参 couta=a, b=bendl;void swap(int* px, int* py)/ 指针作为函数形参 int temp = *px;/ “*px”表示px所指单元的内容 *px = *py;*py = temp;按引用传递方式,函数定义时使用
7、引用作为形参,函数调用时直接使用一般变量作为实参,被调函数对引用的任何修改都将影响主调函数的实参。例2-20引用作为参数。 #include void swap(int&, int&);/ 函数声明 main()int a = 20, b = 40;swap(a, b);couta=a, b=bendl;void swap(int& x, int& y) / 引用作为函数形参 int temp = x;x = y;y = temp; 2-6-1 写出下列程序运行结果: #include iostream.h void swap1(int*, int*);void swap2(int*, int
8、*);void main( )int x=5, y=8, *px, *py;px=&x, py=&y; if(xy) swap1(px,py); coutafter swap1: *px=*px,*py=*pyendl;if(xy) swap2(px,py); coutafter swap2: *px=*px,*py=*pyendl; void swap1(int *p,int *q) int *t; t=p; p=q; q=t; void swap2(int *p,int *q) int t; t=*p;*p=*q;*q=t; 运行结果:after swap1: *px=5, *py=8af
9、ter swap2: *px=8, *py=52-7 在函数定义中为形参指定默认值C+允许在函数声明或函数定义时为形参指定一个默认值。在调用此类含默认值形参的函数时,如果形参有对应的实参,则将实参传递给形参;如果省略了实参,则将上述默认值传递给形参。 如果函数有多个形参,则声明和定义函数时,必须将带缺省值的形参放在参数表的右部,即在带缺省值的形参的右边不能有未指定缺省值的形参。2-8 内联函数在调用函数时,系统要进行现场处理工作,需要占用附加的现场处理时间。若把函数体直接嵌入函数调用处,则可消除附加的现场处理的时间开销,提高程序的运行效率。C+提供了实现上述嵌入功能的函数,这种函数称为内联(i
10、nline)函数。定义一个内联函数只需在函数头前加入关键字inline。当编译程序遇到内联函数调用语句时,就会将该内联函数的函数体替换调用语句。当然,这样将会加大代码占用内存的空间开销,因此,内联函数一般适用于代码较短的函数。 使用内联函数时应注意以下几个问题: (1) 在一个文件中定义的内联函数不能在另一个文件中使用。它们通常放在头文件中共享。 (2) 内联函数应该简洁,只有几个语句,如果语句较多,不适合于定义为内联函数。 (3) 内联函数体中,不能有循环语句、if语句或switch语句,否则,函数定义时即使有inline关键字,编译器也会把该函数作为非内联函数处理。 (4) 内联函数要在函
11、数被调用之前定义。否则,不能起到预期的效果。 2-9 引用引用(reference)是为一个已声明的变量起一个别名。声明一个引用时需要在其名称前加符号“&”,并同时对引用进行初始化,即指定它所引用的对象(是哪一个变量的别名)。声明一个引用一般采用如下格式: & = ;2-10 作用域变量的作用域是指变量可以被引用的区域,变量的作用域决定了变量的可见性。作用域有三种: l 局部作用域 l 全局作用域 l 文件作用域。 具有局部作用域的变量称为局部变量,它们声明在函数(包括main函数)的内部,又称为内部变量。在语句块内声明的变量仅在该语句块内部起作用,也属于局部变量。局部变量的作用域开始于变量声
12、明处,并在标志函数或块结束的右花括号处结束。 例2-21局部变量(包括块内声明的变量)和函数的形参具有局部作用域。 void Myfun(int x)/ 形参x的作用域开始于此 int y = 3;/ 局部变量y的作用域开始于此 int z=x+y;/ 块内局部变量z的作用域开始于此,x和y在该块内可用 / 局部变量k的作用域不包含该块 / 局部变量z的作用域结束 int k; / 局部变量k的作用域开始于此 / 局部变量y、k和形参x的作用域结束全局变量(又称为外部变量)声明在函数的外部,其作用域一般是整个程序源文件。全局作用域范围最广,甚至可以作用于组成该程序的所有源文件。当将多个独立编译
13、的源文件链接成一个程序时,在某个源文件中声明的全局变量,在与该源文件相链接的其它源文件中也可以使用,但使用前必须进行extern外部声明。 例2-22具有全局作用域的全局变量。int x=1;/ 全局变量x的作用域开始于此,结束于整个程序源文件 void Myfun()文件作用域是指在函数外部声明的变量只在当前文件范围内(包括该文件内所有定义的函数)可用,在其它文件中不可用。要使变量具有文件作用域,必须在变量的声明前加上static修饰符。当将多个独立编译的源文件链接成一个程序时,使用static能够避免一个文件的外部变量由于与其它文件中的变量同名而发生冲突。例2-23具有文件作用域的全局变量
14、 static int x = 1;/全局变量x的作用域为当前整个源文件 void Myfun()2-11 生存期,生存期与作用域的关系变量的生存期是指变量的生命周期。变量的作用域是指一个范围,是从代码空间的角度考虑问题。变量的生存期是从时间的角度考虑问题,是指在程序执行的过程中一个变量从创建到被撤消的一段时间。当系统为变量分配内存空间后,变量即开始处于生存期,当变量所占用的内存空间被释放,这个变量即结束了生存期。变量的生存期与作用域是密切相关的,一般变量只有在生存后才能可见(在作用域内)。有些变量(如函数参数)没有生存期,但有作用域,而有时变量虽然在生存期,但却不在作用域内。例2-24 局部
15、变量的生存期和作用域 void Myfun()int x=1;int x(2), y(2);/ 变量“x=1”失去作用域 cout“x=”xn;FuncA();/ 变量x和y在调用函数时失去作用域 第一个声明的局部变量x在语句块内虽然存在,但却是不可见(不可用)的,因为它被语句块内同名的局部变量x所屏蔽了。局部变量x和y在语句块内虽然存在,但在进入函数FuncA()后也是不可见的。2-12 内存分配的方式程序运行时,系统为不同存储属性的变量分配不同类型的内存空间,存储方式决定了变量的作用域和生存期。 变量有以下三种内存分配方式: l 自动分配 l 静态分配 l 动态分配。程序运行后,系统将为程
16、序开辟一块称为栈的活动存储区。自动分配是指在栈中为变量临时分配内存空间。对于自动分配内存的变量,程序运行后,在变量作用域开始时由系统自动为变量分配内存,在作用域结束后即释放内存。一般方式声明的局部变量就是自动分配方式的变量。 系统为每个程序开辟一个固定的静态存储区,静态分配是指在这个固定区域为变量分配内存空间。对于静态分配内存的变量,在编译时就分配了内存地址(相对地址),在程序开始执行时变量就占用内存,直到程序结束时变量才释放内存。全局变量就是静态分配方式的变量。动态分配是指利用一个被称为堆的内存块为变量分配内存空间,堆使用了静态存储区和栈之外的部分内存。动态分配是一种完全由程序本身控制内存的
17、使用的分配方式。对于动态分配内存空间的变量,程序运行后,利用new运算符分配内存,利用delete运算符或程序结束运行释放内存。2-13 存储类型对于非动态分配内存的变量,决定变量采用哪种内存分配方式,是由声明变量时指定的存储类型和变量声明语句的位置所决定的。变量的存储类型有以下四种: l auto自动 l register寄存器 l extern外部 l static静态在声明变量时可以指定变量的存储类型,其一般形式为: ;auto和register用于声明内部变量,auto变量存储在栈中,register变量存储寄存器中。extern用于声明外部变量,static用于声明内部变量或外部变量
18、,extern变量和static变量是存储在静态存储区中。当声明变量时未指定存储类型,则内部变量的存储类型隐含为auto类型,外部变量的存储类型隐含为extern类型。2-14 外部变量的声明方式外部变量的声明分为:l 定义性声明 l 引用性声明 定义性声明表示变量需要分配内存;引用性声明表示要引用的变量已在程序源文件中其它地方进行过定义性声明。定义性声明只能放在函数的外部,引用性声明可放在函数的外部,也可放在函数的内部。extern修饰符主要用于外部变量的引用性声明,外部变量的定义性声明可以不加extern修饰符。进行外部变量的extern引用性声明时一般不能进行初始化,除非定义性声明该外部
19、变量时没有进行初始化。外部变量的使用出现在定义性声明之前需要先进行变量的引用性声明。2-15 在局部变量作用域访问与局部变量同名的全局变量如果局部变量和全局变量同名,在局部作用域内只有局部变量才起作用。C+中可通过使用作用域限定符:来标识同名的全局变量。例2-27#include int amount = 123;/ 全局变量 void main()int amount = 456;/ 局部变量 cout:amount,;/ 输出全局变量 coutamount,;/ 输出局部变量 :amount = 789;/ 访问全局变量 cout:amount,;/ 输出全局变量 coutamountn;
20、/ 输出局部变量 2-16 函数的存储类型函数也具有存储类型,不同存储类型的函数具有不同的作用域。函数被分为内部函数(static)和外部函数(extern,默认值),内部函数只能被同一个源文件中的函数调用,而外部函数可以被其它源文件中的函数调用。调用外部函数前必须先进行外部函数声明。2-17 宏定义2-17-1 设有宏定义如下,变量x的值是多少?# define A 2# define B A+3# define C(x) x*B/2int x=C(2+8);2-18 动态内存分配有时程序只能在运行时才能确定需要多少内存空间来存储数据,这时程序员就需要采用动态内存分配的方法设计程序。动态内存
21、分配是指在程序运行时为程序中的变量分配内存空间,它完全由应用程序自己进行内存的分配和释放。动态内存分配是在一些被称为堆的内存块中为变量分配内存空间。 在C+中最常用的方法是利用new和delete运算符进行动态内存的分配和释放,使用new运算能够检测内存泄漏。运算符new的使用形式:p = new size;l type是数据类型,表示要为哪种数据类型的变量分配空间; l size表示要为多少个变量分配空间,可以省略size(缺省值为1); l p是一个type类型的指针变量,指向所分配的存储单元。 2-19 (引用)给出以下程序的执行结果,并说明为什么是这种结果。#include void
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual C+面向对象编程 Visual C+面向对象编程复习纲要 2014 Visual C+ 面向 对象 编程 复习 纲要
限制150内