面向对象编程技术第五章

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据访问-可见性
注意:
标识符应声明在先,引用在后。 在同一作用域中,不能声明同名的标识符。


如果某个标识符在外层中声明,且在内层中没有同一 标识符的声明,则该标识符在内层可见。
对于两个嵌套的作用域,如在内层作用域内声明了与 外层作用域中同名的标识符,则外层作用域的标识符 在内层不可见。
强龙不压地头蛇原则
与声明部 分的名称 可以不同 返 回
}
块作用域
什么是块:简言之,{… … } 在块中声明的标识符,其作用域自声明处起,限于 块中,例如: void fun(int a) { int b(a); b的作用域 cin>>b; if (b>0) { static int c; c的作用域 ...... } }
提出问题:
1. 程序、软件中存在大量的实体对象 2. 如何解决由此产生数据访问控制问题:如作用域;对象 的生命周期;数据共享等等
本章主要内容
数据访问 数据共享 程序组织
作用域与可见性 对象的生存期 数据与函数
静态成员 友元 共享数据的保护
编译预处理命令 多文件结构和工程
数据访问-作用域
函数原型中的参数,其作用域始于 "(",结束于")"。 radius 的作用域仅在 例如,设有下列原型声明: 于此,不能用于程序 double Area(double radius); 正文其它地方,因而 可有可无。 double Area(double);
double area(double r) { return 3.14*r*r;
class part_cla
{ public: int a;… void prt(){…} }; } {
part_cla pc; //出错!此时类的作用域不包含块作用域
} }


数据访问-对象的生存期
对象从产生到结束的这段时间就是它的生存期。 在对象生存期内,对象将保持它的值,直到被更新 为止。P124 静态生存期
返 回
动态生存期
定义:块作用域中声明的对象是动态生存期的对象(习 惯称局部生存期对象)。 开始于程序执行到声明点时,结束于命名该标识符的
作用域结束处。
什么是作 用域?
示例

#include<iostream.h> void fun( ); 运行结果: void main( ) { fun( ); i=6, a=2 fun( ); i=6, a=3 } void fun( ) i是动态生存期 { static int a=1; a是静态生存期 int i=5; a++; i++; cout<<"i="<<i<<",a="<<a<<endl; }
?
}
返 回
文件作用域
在main()之外,且不在前三者作用域范围内的数据 具有文件作用域
int i,j;
……
void main() { …… }
请看 下页


准确理解作用域整体视图P123
文件作用域 类作用域 块作用域

问题:1.这种包含关系什么时候成立? 2.类作用域一定包含块作用域吗?例
main() {… … {
例 5.1
#include<iostream.h> int i; //文件作用域 int main( ) { i=5; { int i; //块作用域 i=7; cout<<"i="<<i<<endl; //输出7 } cout<<"i="<<i; //输出5 return 0; }
返 回
函数原形的作用域
下页例子
类作用域
class A { public: 可以这样访问
A a; a.b=5; a.prt(); 可以的 A::prt();//如果 static prt()则 正确 A a; a::prt(); A.b=12;
int b;
Static void prt() { Cout<<“test”; Cout<<“b=“<<b<<<endl; … }
1. 作用域与可见性的含义。
作用域:指标示符在源文件中的有效作用范围 可见性:指标识符是否可以引用的问题。
联系与区别
2. 作用域分类
1) 2) 3) 4) 函数原型作用域 块作用域:搞清块的含义,块是由{}界定的相对独立一段程序空间 类作用域: 文件作用域:
数据访问-可见性
可见性是从对标识符的引用的角度来谈的概念 可见性表示从内层作用域向外层作用域“看”时能 看见什么。 如果标识在某处可见,则就可以在该处引用此标识 符。
动态生存期
返 回
静态生存期
定义:生存期与程序的运行期相同,称为静态生存期
两 种 静 态 生 存 期
在文件作用域中声明的对象具有这种生存期。
在函数内部声明静态生存期对象,用关键字static声 明的对象 。
示例
例:
#include<iostream.h> int i=5; //文件作用域 void out(); void main() { cout<<"i="<<i<<endl; out(); out(); } void out(){static ct; ++ct;cout<<"ct="<<ct<<endl;} 注意:i ,ct具有静态生存期
注意:
1. 静态生存期与程序的生成期相同,一经创建,便 贯穿始终。
静态生存期有局部和全局两种定义方式
2. 动态生存期指临时创建,临时使用,动态内存分 配 3. 变量的生存期与可见性的讨论 可见一定生存,但生存未必可见
联系作 用域


数据访问-数据与函数
数据、代码结 合方式
三 种 基 本 方 式
1.
注意:块内定义的静态变量,具有”文件作用域”
返 回
类作用域
类作用域作用于特定的成员名,类及其对象有特殊 的访问和作用域规则
设类X,X的对象x,成员M,X的函数成员f
如f没有新定义同名标识符M,则在f可以访问M
可以这样访问:
X::M (大写x); x.M(小写x) ptr->M (ptr为指向对象x的指针)
数据存储在局部对象中,通过参数传递实现共
享——函数间的参数传递。
2. 3. 数据存储在全局对象中。 将数据和使用数据的函数封装在类中。
数据访问-静态成员
静态成员的提出:
为了解决同类中不同对象的间的数据、函数(代码) 共享问题。
静态数据成员
包 括 静态函数成员
Байду номын сангаас
如何定义
相关文档
最新文档