第3章-5C程序的结构.ppt
《第3章-5C程序的结构.ppt》由会员分享,可在线阅读,更多相关《第3章-5C程序的结构.ppt(47页珍藏版)》请在三一文库上搜索。
1、C+程序的结构,计算机科学与技术学院 曲立平 Email: ,哈尔滨工程大学计算机科学与技术学院,哈尔滨工程大学计算机科学与技术学院,函数原型的作用域,函数原型中的参数,其作用域始于“(“,结束于“)“。 例:设有下列原型声明: double Area(double radius);,radius 的作用域仅在于此,不能用于程序正文其它地方,因而可有可无。,哈尔滨工程大学计算机科学与技术学院,块作用域,在块中声明的标识符,其作用域自声明处起,限于块中。 例: void fun(int a) int b(a); cinb; if (b0) int c; ,哈尔滨工程大学计算机科学与技术学院,类作
2、用域,类作用域作用于特定的成员名。 类X的成员M具有类作用域,对M的访问方式如下: 如果在X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以访问成员M。 通过表达式x.M或者X:M访问。 通过表达式prt-M,哈尔滨工程大学计算机科学与技术学院,类作用域,#include class C public: C(int v):X(v) void SetX(int X) C:X=X; /this-X=X; 正确 int GetX() return X; private: int X; ; void main(void) C c(1); c.SetX(5); coutc.GetX();
3、,哈尔滨工程大学计算机科学与技术学院,文件作用域,不在前述各个作用域中出现的声明,具有文件作用域,这样声明的标识符的作用域开始于声明点,结束于文件尾。,哈尔滨工程大学计算机科学与技术学院,可见性,可见性是从对标识符的引用的角度来谈的概念。 可见性表示从内层作用域向外层作用域“看”时能看见什么。 如果标识在某处可见,则就可以在该处引用此标识符。,块作用域,哈尔滨工程大学计算机科学与技术学院,可见性,标识符应声明在先,引用在后。 如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。 对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域
4、的标识符在内层不可见。,哈尔滨工程大学计算机科学与技术学院,同一作用域中的同名标识符,在同一作用域内的对象名、函数名、枚举常量名会隐藏同名的类名或枚举类型名。 重载的函数可以有相同的函数名。,哈尔滨工程大学计算机科学与技术学院,例:文件作用域与块作用域,#include int i; int main() i=5; int i; i=7; cout“i=“iendl; cout“i=“i; return 0; ,/文件作用域,/块作用域,/输出7,/输出5,哈尔滨工程大学计算机科学与技术学院,例:非类型名隐藏类型名,Class Sample /定义类 / ; void func(int Sam
5、ple) /函数形参隐藏了类名 class Sample a; /定义一个对象要用到类名 Sample+; /形参的算术运算 / ,类名被函数的形参覆盖,函数内定义类对象,需加前缀class,哈尔滨工程大学计算机科学与技术学院,例:类型名隐藏了一个非类型名,int s=0; /全局变量 void func( ) class s /; /类名s隐藏了全局变量s s a; :s=3; /class s作用域结束 int g=s; /用全局变量s给变量g初始化,哈尔滨工程大学计算机科学与技术学院,例:一个名字不能同时指两种类型,class C / ; typedef int C;,/错误:又定义一个
6、类型取同名,哈尔滨工程大学计算机科学与技术学院,例:非类型名不能重名,Student a; void a( );,/error:函数名与对象名同名,非类型名:变量名、常量名、函数名、对象名或枚举成员,哈尔滨工程大学计算机科学与技术学院,例:非类型名与类型名相同,int f; class f / ; class f g;,哈尔滨工程大学计算机科学与技术学院,哈尔滨工程大学计算机科学与技术学院,对象的生存期,含义 对象从产生到结束的这段时间就是它的生存期。在对象生存期内,对象将保持它的值,直到被更新为止。 分类 静态生存期 动态生存期,哈尔滨工程大学计算机科学与技术学院,/文件作用域,i具有静态生
7、存期,这种生存期与程序的运行期相同。 在文件作用域中声明的对象具有这种生存期。 在函数内部声明静态生存期对象,要冠以关键字static 。 例:,静态生存期,#include int i=5; int main() cout“i=“iendl; return 0; ,哈尔滨工程大学计算机科学与技术学院,块作用域中声明的,没有用static修饰的对象是动态生存期的对象(习惯称局部生存期对象)。 开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。 例:,动态生存期,#include void fun(); void main() fun(); fun(); void fun() stat
8、ic int a=1; int i=5; a+; i+; cout“i=“i“,a=“aendl; ,运行结果: i=6, a=2 i=6, a=3,i是动态生存期,a是静态生存期,哈尔滨工程大学计算机科学与技术学院,例:变量的生存期与可见性,#include int i=1; void main(void) static int a; int b=-10; int c=0; void other(void); cout“-MAIN-n“; cout“ i: “i“ a: “a“ b: “b“ c:“cendl; c=c+8; other(); cout“-MAIN-n“; cout“ i:
9、“i“ a: “a“ b: “b“ c: “cendl; i=i+10; other(); ,/ i 为全局变量,具有静态生存期。,/ 静态局部变量,有全局寿命,局部可见。,/ b, c为局部变量,具有动态生存期。,哈尔滨工程大学计算机科学与技术学院,例:变量的生存期与可见性,void other(void) static int a=2; static int b; int c=10; a=a+2; i=i+32; c=c+5; cout“-OTHER-n“; cout“ i: “i“ a: “a“ b: “b“ c: “cendl; b=a; ,/ a,b为静态局部变量,具有全局寿命,局部
10、可见。 只第一次进入函数时被初始化。,/ C为局部变量,具有动态生存期, 每次进入函数时都初始化。,运行结果: -MAIN- i: 1 a: 0 b: -10 c: 0 -OTHER- i: 33 a: 4 b: 0 c: 15 -MAIN- i: 33 a: 0 b: -10 c: 8 -OTHER- i: 75 a: 6 b: 4 c: 15,哈尔滨工程大学计算机科学与技术学院,例:具有静动态生存期对象的程序,#include class Clock /时钟类声明 public: /外部接口 Clock(); void SetTime(int NewH, int NewM, int New
11、S); void ShowTime(); Clock() private: /私有数据成员 int Hour,Minute,Second; ;,/三个形参均具有函数原型作用域,哈尔滨工程大学计算机科学与技术学院,例:具有静动态生存期对象的程序,/时钟类成员函数实现 Clock:Clock() /构造函数 Hour=0; Minute=0; Second=0; void Clock:SetTime(int NewH, int NewM, int NewS) Hour=NewH; Minute=NewM; Second=NewS; void Clock:ShowTime() coutHour“:“
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 结构
链接地址:https://www.31doc.com/p-2254167.html