版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章数据的共享与保护佘欣媛5.1作用域与可见性作用域:是标识符的有效范围;可见性:标识符是否可以引用的问题;5.1.1作用域1、函数原型的作用域2、块作用域3、类作用域4、命名空间作用域1、函数原型的作用域函数原型中的参数,其作用域始于
"(",结束于")"。例如,设有下列原型声明:doubleArea(doubleradius);//函数的声明radius的作用域仅在于此,不能用于程序正文其它地方,因而可有可无。3、类作用域classX{public: intm; intGetM();};intX::GetM(){ returnm;}X类的成员m具有类作用域3、对类的成员三种访问方式(1)如果在X的成员函数中没有声明相同的局部作用域标识符,那么在该函数内可以直接访问成员m(2)通过表达式x.m或X::m访问(3)通过表达式ptr->m访问,ptr为指向X类的一个对象的指针(1)如果在X的成员函数中没有声明相同的局部作用域标识符,那么在该函数内可以直接访问成员m
classX{public: intm; intGetM();};intX::GetM(){ returnm;}成员函数成员数据类内成员可以互相直接访问classX{public:
int
m; voidGetM(intm);};voidX::GetM(int
m){ cout<<m<<endl; return;}成员函数函数GetM的形参——局部变量这是哪个m局部变量(2)通过表达式x.m或X::m访问classX{public: intm; voidGetM(intm);};voidmain(){ Xx;
x.m=3; return;}(3)通过表达式ptr->m访问,ptr为指向X类的一个对象的指针classX{public: intm; voidGetM(intm);};voidmain(){ Xx; X*pClass=x; pClass->m=3; return;}等同于x.m=34、命名空间作用域namespace命名空间名{命名空间名内的各种声明; };可以是各种东西的声明都行:函数、类、变量……namespaceshe{ intiSheNum; classTestClass { public: intiNum; };voidfunction1();};命名空间名字数据变量类函数命名空间中标识符的引用 usingnamespace命名空间名;using命名空间::标识符名;命名空间::标识符名usingnamespace命名空间名;#include<iostream>usingnamespacestd;voidmain(){
cout<<“命名空间引用”;}using命名空间::标识符名;namespaceshe{ intiSheNum;int
iNotUsing;};usingshe::iSheNum;voidmain(){
iSheNum=2; cout<<iSheNum<<endl;iNotUsing=3; return;}一旦使用了红色声明,那么用到iSheNum的各处都不用指明出处iNotUsing的使用会报错吗会,因为没有声明引用命名空间::标识符名namespaceshe{ intiSheNum;int
iNotUsing;};usingshe::iSheNum;voidmain(){
iSheNum=2; cout<<iSheNum<<endl;
she::iNotUsing=3; return;}这样子就对了命名空间是开放的,即可以随时把新的成员名称加入到已有的命名空间之中去。方法:多次声明和定义同一命名空间,每次添加自己的新成员和名称。namespace
A
{
inti;
voidf();
}//现在A有成员i和f()
namespaceA{
intj;
voidg();
}//现在A有成员i、f()、j和g()
命名空间可以嵌套定义Namespace命名空间名1{ namespace命名空间名2 { };};namespaceouter{ intiOuter; namespaceinner { intiInner; };};voidmain(){
outer::iOuter=5;
outer::inner::iInner=6;}5.1.2可见性程序运行到某一点。能够引用到的标识符,就是该处可见的标识符。可见性表示从内层作用域向外层作用域“看”时能看见什么。块作用域类作用域命名空间作用域作用域包含关系作用域可见性的一般规则:标识符应声明在先,引用在后。在同一作用域中,不能声明同名的标识符。如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。1、标识符应声明在先,引用在后voidmain(){
iNum=9;intiNum;}voidmain(){
intiNum;
iNum=9;}2、在同一作用域中,不能声明同名的标识符。voidmain(){
intiNum;//变量的声明intiNum=9;//重复定义}//提示redefinition如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。voidmain(){inta=1;{ inta=2; cout<<a<<endl;}}5.2对象的生存期产生结束生存期静态生存期动态生存期5.2.1静态生存期生存期与程序的运行期相同从执行程序开始到退出程序命名空间中的函数内部有static修饰的staticintiNum;开始运行程序退出程序voidfunction1(){intiNum=0;iNum++;cout<<iNum<<endl;}voidmain(){
function1();
function1();}运行结果?11voidfunction1(){
staticintiNum=0;iNum++;cout<<iNum<<endl;}voidmain(){
function1();
function1();}运行结果?125.2.2动态生存期声明处所在作用域结束除了静态生存期的都是动态生存期#include<iostream.h>voidfun();voidmain(){fun();fun();}voidfun(){
staticinta=1;inti=5;
a++;i++;cout<<"i="<<i<<",a="<<a<<endl;}这里所讲静态、动态生存期不单单针对普通变量,同样适用于类对象voidcrePoint(){
point
myPoint; myPoint.iNum=1; myPoint.set(); myPoint.set(); myPoint.show();}intmain(){ crePoint();
myPoint.show();}pointmyPoint;看到这voidcrePoint(){
myPoint.iNum=1; myPoint.set(); myPoint.set(); myPoint.show();}intmain(){ crePoint(); myPoint.show();}5.3类的静态成员5.3.1静态数据成员5.3.2静态函数成员普通的类IntiNumvoidfunction()Point类IntiNumvoidfunction()对象1IntiNumvoidfunction()对象2……分配了内存分配了内存没有分配内存是虚无的各个对象有各自的数据和函数5.3.1静态数据成员在普通数据成员的声明前面加了static标志classPoint {public: Point(); intX;
static
intcountP;
};intcountP=0;需要在类外单独初始化有静态数据的类intX;static
intcountP;Point();Point类intX;
Point();对象1intX;
Point();对象2……分配了内存分配了内存其他没有分配内存是虚无的各个对象有各自的数据和函数countP分配了内存,为各个对象共享classPoint {public: Point(); intX;private:
static
intcountP;
};intcountP=0;用来分配内存虽然是私有变量但是可以在类外初始化voidmain(){PointmyPoint;}Point::
countP;如何引用静态成员countPmyPoint::
X;如何引用普通成员X5.3.2静态函数成员有静态数据的类intX;static
voidf();Point();Point类intX;
Point();对象1intX;
Point();对象2……分配了内存分配了内存其他没有分配内存是虚无的各个对象有各自的数据和函数static
voidf(),为各个对象共享classA{public:st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度度假酒店房间长期住宿合同模板3篇
- 2025材料买卖供应合同
- 2025减亏包干合同范文
- 2025版押一付三酒店分租合同模板参考2篇
- 2025技术咨询合同书样式
- 2025墙地砖购销合同
- 2025年度钢材特殊材料运输合同范本2篇
- 2025年度成都市二手房买卖合同范本 正规版修订8篇
- 2025年度环保技术专利股权收购协议书4篇
- 二零二五年份房产分配及子女婚嫁资金监管合同3篇
- 船员外包服务投标方案
- 沉积相及微相划分教学课件
- 钳工考试题及参考答案
- 移动商务内容运营(吴洪贵)任务五 引发用户共鸣外部条件的把控
- 工程造价专业职业能力分析
- 医药高等数学知到章节答案智慧树2023年浙江中医药大学
- 冲渣池施工方案
- 人教版初中英语八年级下册 单词默写表 汉译英
- 学校网络信息安全管理办法
- 中国古代文学史 马工程课件(下)21第九编晚清文学 绪论
- 2023年铁岭卫生职业学院高职单招(语文)试题库含答案解析
评论
0/150
提交评论