C++语言程序设计 第五章C十程序的结构 湖南科技大学莫尚丰
第五章 C++程序的结构 湖南科技大学 莫尚丰 C++语言程序设计
C++语言程序设计 湖南科技大学 本章主要内率 作用域与可见性 ●对象的生存期 数据与函数 ●静态成员 ●共享数据的保护 友元 ●编译预处理命令 多文件结构和工程
C++语言程序设计 湖南科技大学 2 本章主要内容 ⚫ 作用域与可见性 ⚫ 对象的生存期 ⚫ 数据与函数 ⚫ 静态成员 ⚫ 共享数据的保护 ⚫ 友元 ⚫ 编译预处理命令 ⚫ 多文件结构和工程
C++语言程序设计 湖南科技大学 函数原形的作用域 作 用。函数原型中的参数,其作用域始于 域"(",结束于")" 与。例如,设有下列原型声明 double Area(double radius 见 性 radius的作用域仅在于此, 不能用于程序正文其他地方, 因而可有可无 3
C++语言程序设计 湖南科技大学 3 函数原形的作用域 ⚫ 函数原型中的参数,其作用域始于 "(",结束于")"。 ⚫ 例如,设有下列原型声明: double Area(double radius); radius 的作用域仅在于此, 不能用于程序正文其他地方, 因而可有可无。 作 用 域 与 可 见 性
C++语言程序设计 湖南科技大学 块作用域 作 用。在块中声明的标识符,其作用域自声明处 起,限于块中,例如: 域与可见 void fun (int a int b(a cin>b if(b>0 b的作用域 性 int C: c的作用域
C++语言程序设计 湖南科技大学 4 块作用域 ⚫ 在块中声明的标识符,其作用域自声明处 起,限于块中,例如: void fun(int a) { int b(a); cin>>b; if (b>0) { int c; ...... } } c的作用域 b的作用域 作 用 域 与 可 见 性
C++语言程序设计 湖南科技大学 类作用域 作 用类X的成员M具有类作用域,对M的访问 域与可见 方式如下: 如果在X的成员函数中没有声明同名的局 部作用域标识符,那么在该函数内可以 性 访问成员M 通过表达式x.M或者X::M访问 通过表达式prt-》M
C++语言程序设计 湖南科技大学 5 类作用域 类X的成员M具有类作用域,对M的访问 方式如下: –如果在X的成员函数中没有声明同名的局 部作用域标识符,那么在该函数内可以 访问成员M。 –通过表达式x.M或者X::M访问。 –通过表达式prt->M 作 用 域 与 可 见 性
C++语言程序设计 湖南科技大学 文件作用域 作 用。不在前述各个作用域中出现的声明, 域具有文件作用域,这样声明的标识符 与 的作用域开始于声明点,结束于文件 见 尾 性
C++语言程序设计 湖南科技大学 6 文件作用域 ⚫ 不在前述各个作用域中出现的声明, 具有文件作用域,这样声明的标识符 的作用域开始于声明点,结束于文件 尾。 作 用 域 与 可 见 性
C++语言程序设计 湖南科技大学 可见性 作。可见性是从对标识符的引用的角度来谈 用的概念 域与可见 ●可见性表示从内层作用域向外层作用域 “看”时能看见什么。 如果标识在某处可见,则就可以在该处 性引用此标识符爱件作用线 类作用域 块作用域
C++语言程序设计 湖南科技大学 7 可见性 ⚫ 可见性是从对标识符的引用的角度来谈 的概念 ⚫ 可见性表示从内层作用域向外层作用域 “看”时能看见什么。 ⚫ 如果标识在某处可见,则就可以在该处 引用此标识符。 块作用域 类作用域 文件作用域 作 用 域 与 可 见 性
C++语言程序设计 湖南科技大学 可见性 作 用。标识符应声明在先,引用在后。 域。如果某个标识符在外层中声明,且在内层中 与没有同一标识符的声明,则该标识符在内层 可可见。 见。对于两个嵌套的作用域,如果在内层作用域 性生内声明了与外层作用域中同名的标识符,则 外层作用域的标识符在内层不可见
C++语言程序设计 湖南科技大学 8 可见性 ⚫ 标识符应声明在先,引用在后。 ⚫ 如果某个标识符在外层中声明,且在内层中 没有同一标识符的声明,则该标识符在内层 可见。 ⚫ 对于两个嵌套的作用域,如果在内层作用域 内声明了与外层作用域中同名的标识符,则 外层作用域的标识符在内层不可见。 作 用 域 与 可 见 性
C++语言程序设计 湖南科技大学 例5.1 作 #includeiostream. h> 用域 inti;/文件作用域 int main 与{i=5; inti;//块作用域 见 性 cout<"i="<i<<endl;//输出7 cout<"i="<i;//输出5 return O
C++语言程序设计 湖南科技大学 9 #include int i; //文件作用域 int main() { i=5; { int i; //块作用域 i=7; cout<<"i="<<i<<endl; //输出7 } cout<<"i="<<i; //输出5 return 0; } 作 用 域 与 可 见 性 例 5.1
C++语言程序设计 湖南科技大学 程序的内存分配 1、栈区( stack) 由编详器( compiler自动 分配释放,存放函数的参数值,局部变量值等 2、堆区(heap) 般由程序员分配释 放,若程序员不释放,程序结束时可能由OS回 收 3、全局数据区(data)一全局变量和静态变量的 存储是放在一块的。程序结束后由系统释放 4、文字常量区一常量字符串就是放在这里 的。程序结束后由系统释放。 5、程序代码区(code)一存放函数体的二进制 代码
C++语言程序设计 湖南科技大学 10 程序的内存分配 1、栈区(stack)— 由编译器(Compiler)自动 分配释放 ,存放函数的参数值,局部变量值等。 2、堆区(heap) — 一般由程序员分配释 放, 若程序员不释放,程序结束时可能由OS回 收 。 3、全局数据区(data)—全局变量和静态变量的 存储是放在一块的。 程序结束后由系统释放 。 4、文字常量区 — 常量字符串就是放在这里 的。 程序结束后由系统释放。 5、程序代码区(code)— 存放函数体的二进制 代码