好文档 - 专业文书写作范文服务资料分享网站

C++语言程序设计实验答案 - 数据的共享与保护 - 图文 

天下 分享 时间: 加入收藏 我要投稿 点赞

.

(1) 若在X的成员函数中无同名的局部作用域标识符,则在该函数可访问成员m。

(2) 通过表达式x.m或X::m。这正是程序中访问对象成员的最基本方法。 (3) 通过prt->m这样的表达式,其中prt为指向X类的一个对象的指针。

4. 命名空间作用域 命名空间

大型程序通常由不同模块构成,不同模块中的类和函数之间可能发生重名,将引发错误。

命名空间可以解决类名、函数等的命名冲突。 命名空间语法形式: namespace 命名空间名{ 命名空间的各种声明(函数声明、类声明、……) } 例 namespace SomeNs { class SomeClass { ... }; } 特殊的命名空间 _ 全局命名空间:默认的命名空间

_ 匿名命名空间:对每个源文件是唯一的

命名空间作用域

一个命名空间确定了一个命名空间作用域 引用其它命名空间作用域中的标识符 _ 命名空间名::标识符名

_ 例:声明一个SomeClass型的对象

SomeNs::SomeClass obj1;

将其它命名空间作用域的标识符暴露于当前作用域 _ 对指定标识符

using 命名空间名::标识符名;

_ 对所有标识符

using namespace命名空间名;

例5-1中所声明的全局变量就具有文件作用域,它们在整个文件中都有效。

例5-1 作用域实例。

#include using namespace std; //使得在当前文件中可直接引用std命名空间的标识符cout int i;//全局变量,文件作用域 namespace Ns{ .

.

int j;//在Ns命名空间中的全局变量 } void main() { i=5;//文件作用域的i赋初值 Ns::j=6;//为全局变量j赋值 {//子块1 using namespace Ns;//使得在当前块中可直接引用Ns命名空间的标识符 int i;//局部变量,块作用域 i=7; cout<<\//输出7 cout<<\ } cout<<\//输出5 } 参考(cout, endl是命名空间std中的全局变量): #include //using namespace std; //使得在当前文件中可直接引用std命名空间的标识符cout,endl int i;//全局变量,文件作用域 namespace Ns{ int j;//在Ns命名空间中的全局变量 } void main() { i=5;//文件作用域的i赋初值 Ns::j=6;//为全局变量j赋值 {//子块1 using namespace Ns;//使得在当前块中可直接引用Ns命名空间的标识符 int i;//局部变量,块作用域 i=7; std::cout<<\std::endl;//输出7 std::cout<<\std::endl; } std::cout<<\std::endl;//输出5 .

.

} 具有文件作用域的变量也称为全局变量。 5.1.2 可见性P150

可见的标识符 程序运行到某一点,能够引用到的标识符。 文件作用域最大,接下来依次是类作用域和块作用域。

图5-1 作用域关系图

可见性表示从层作用域向外层作用域“看”时能看到什么。 作用域可见性的一般规则: _ 标识符声明在前,引用在后。

_ 同一作用域,不能声明同名标识符。

_ 在没有包含关系的不同作用域中声明的同名标识符互不影响。

_ 在具有包含关系的作用域中声明了同名标识符,则外层标识符在层不可见。

例5-l中,文件作用域与块作用域相互包含。

#include using namespace std;

int i;//全局变量,文件作用域 namespace Ns{

int j;//在Ns命名空间中的全局变量 }

void main(){ i=5;//文件作用域的i赋初值 Ns::j=6;//为全局变量j赋值 {//子块1 using namespace Ns; int i;//局部变量,块作用域 i=7; cout<<\//输出7 cout<<\ } cout<<\//输出5 }

在主函数子块1前,可引用到具有文件作用域的变量,它是可见的。 当进入子块1,只能引用到具有局部作用域的同名变量,文件作用域的同名变量不可见,称层屏蔽,或同名覆盖,即层的变量覆盖了外层的同名变量。

.

.

5.2 对象的生存期P150

对象(包括简单变量)从诞生到结束的这段时间就是它的生存期。

5.2.1 静态生存期

若对象的生存期与程序的运行期相同,称它具有静态生存期。 在文件作用域中声明的对象具有静态生存期的。

若要在函数部的块作用域中声明具有静态生存期的对象,则要使用关键字static。

static int i; i称为静态变量。

其余的对象都具有动态生存期。

定义时未指定初值的基本类型静态生存期变量,初值为0;动态生存期变量,不指定初值时值不确定。

5.2.2 动态生存期

在块作用域中声明的具有动态生存期的对象,称局部生存期对象。 动态生存期对象诞生于声明点,结束于该标识符作用域结束处。

例5-2 变量的生存期与可见性。

局部变量就是具有块作用域的变量。 全局变量就是具有文件作用域的变量。 #include using namespace std; int i=1;//i为全局变量,具有静态生存期 void other(void){ static int a=2; static int b;//a, b为静态局部变量,具有全局寿命,局部可见,只第一次进入函数时被初始化 int c=10;//c为局部变量,具有动态生存期,每次进入函数时都初始化 a=a+2; i=i+32; c=c+5; cout<<\ cout<<\ a:\ b:\ c:\ b=a; } void main() .

.

{ } static int a;//a为静态局部变量,具有全局寿命,局部可见 int b=-10;//b, c为局部变量,具有动态生存期 int c=0; cout<<\cout<<\ a:\ b:\ c:\c=c+8; other(); cout<<\cout<<\ a:\ b:\ c:\c=c+10; other(); 例5-3 具有静态、动态生存期对象的时钟程序。

声明具有函数原型作用域、块作用域、类作用域和文件作用域的多个变量及对象,并分析各自的可见性和生存期。 #include using namespace std; class Clock//时钟类定义 { public: Clock(); void setTime(int newH,int newM,int newS);//三个形参具有函数原型作用域 void showTime(); private: int hour,minute,second; }; //时钟类成员函数实现 Clock::Clock():hour(0),minute(0),second(0){ }//构造函数 void Clock::setTime(int newH,int newM,int newS)//3个形参均具有局部作用域 { hour=newH; minute=newM; second=newS; } void Clock::showTime(){ cout<

C++语言程序设计实验答案 - 数据的共享与保护 - 图文 

.(1)若在X的成员函数中无同名的局部作用域标识符,则在该函数可访问成员m。(2)通过表达式x.m或X::m。这正是程序中访问对象成员的最基本方法。(3)通过prt->m这样的表达式,其中prt为指向X类的一个对象的指针。4.命名空间作
推荐度:
点击下载文档文档为doc格式
2rdeg2ieb99lpyv23wwc1symv1jox50077u
领取福利

微信扫码领取福利

微信扫码分享