- 1、本文档共91页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1
实验报告一
注意:
word文件统一命名为:学号-姓名
2
第五章 数据的共享与保护
作用域与可见性
对象的生存期
数据与函数
静态成员
友元
共享数据的保护
编译预处理命令
多文件结构和工程
深度探索
3
函数原形的作用域
函数原型中的参数,其作用域始于(,结束于)。
例如,设有下列原型声明:
double area(double radius);
该变量的作用域仅在于此,不能用于程序正文其他地方,因而可有可无。
作用域与可见性
4
局部作用域
函数的形参,在块中声明的标识符,其作用域自声明处起,限于块中,例如:
void fun(int a) {
int b = a;
cin b;
if (b 0) {
int c;
......
}
}
作用域与可见性
a的作用域
5
类作用域
类作用域作用于特定的成员名。
类X的成员m具有类作用域,对m的访问方式如下:
如果在X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以访问成员m。
通过表达式X.m或者X::m访问。
通过表达式ptr-m
(ptr是指向类的一个对象的指针,第六章中将介绍指针)
作用域与可见性
6
命名空间
命名空间可以解决类名、函数名等的命名冲突
命名空间的声明
namespace 命名空间名 {
各种声明(函数声明、类声明、……)
}
例
namespace SomeNs {
class SomeClass { ... };
}
作用域与可见性
命名空间作用域
一个命名空间确定了一个命名空间作用域
在该命名空间中声明的、不属于前述各作用域的标识符都属于该命名空间
命名空间内部直接引用当前命名空间中声明的标识符
引用其它命名空间作用域中的标识符
命名空间名 :: 标识符名
例:声明一个SomeClass型的对象
SomeNs :: SomeClass obj1;
7
作用域与可见性
命名空间作用域
using语句的两种形式:
using 命名空间名 :: 标识符名;
该标识符暴露在当前作用域,当前作用域可以直接引用该标识符
using namespace 命名空间名;
该命名空间中的所有标识符暴露在当前作用域,当前作用域可以该命名空间中的任何标识符
8
作用域与可见性
命名空间的嵌套
引用其中的SomeClass类,需要语法形式:
OuterNs :: InnerNs :: SomeClass
9
作用域与可见性
10
两类特殊的命名空间
全局命名空间 —— 默认的命名空间
显示声明的命名空间之外的标识符
匿名命名空间 —— 对每个源文件是唯一的
显示声明但没有名字的命名空间:
作用:屏蔽不希望暴露给其他源文件的标识符
作用域与可见性
11
可见性
可见性:程序运行到某一点,能够引用到的标识符,就是该处可见的标识符
可见性表示从内层作用域向外层作用域“看”时能看见什么。
如果标识在某处可见,则就可以在该处引用此标识符。
作用域与可见性
12
可见性
作用域可见性的一般规则如下:
(1)标识符应声明在先,引用在后。
(2)在同一个作用域中,不能声明同名的标识符。
(3)在没有互相包含关系的不同的作用域中声明的同名标识符,互不影响。
(4)如果在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见。
作用域与可见性
13
作用域与可见性实例
作用域与可见性
14
对象的生存期
生存期:对象从产生到结束的这段时间
在对象生存期内,将保持对象的状态(即数据成员的值),以及变量的值不变,直到被更新为止生存期
分为两种:静态生存期和动态生存期
15
静态生存期
定义:对象的生存期与程序的运行期相同,称它具有静态生存期
在命名空间作用域中声明的对象具有静态生存期
在局部/类作用域中声明静态生存期的对象,要冠以关键字static
例:static int i; // 未赋初值时,默认为0
static int i=5; // 可以同时赋初值
对象的生存期
16
#includeiostream
using namespace std;
int i = 5; //全局命名空间作用域
int main( ){
cout i= i endl;
return 0;
}
对象(变量)i具有静态生存期
对象的生存期
静态生存期(例)
17
静态生存期
局部作用域中静态变量的特点:
不会随着每次函数调用而产生一个副本
例如:同一标识符不会在递归调用中共享
不会随着函数返回而失效(下一次再调用时,该变量还会保持上一回的值)
例如:在函数体内定义
static int i = 5;
对象的生存期
18
动态生
文档评论(0)