第5数据的共享和保护.ppt
《第5数据的共享和保护.ppt》由会员分享,可在线阅读,更多相关《第5数据的共享和保护.ppt(34页珍藏版)》请在三一文库上搜索。
1、C+语言程序设计基础,第5章 数据的共享与保护,5.1 标识符的作用域与可见性 5.2 对象的生存期 5.3 类的静态成员 5.4 类的友元 5.5 共享数据的保护 5.6 多文件结构和编译预处理命令,5.1 标识符的作用域与可见性,作用域是一个标识符的有效范围 函数原型作用域 局部作用域(块作用域) 类作用域 命名空间作用域 可见性是讨论标识符是否可以被引用 可见性表示从内层作用域向外层作用域“看”时能看见什么 如果标识在某处可见,则就可以在该处引用此标识符,函数原型作用域,函数原型中的参数,其作用域始于 “(“,结束于“)“。 例如,设有下列原型声明: double Area(double
2、 r); r的作用域仅在于此,不能用于程序正文其他地方,因而可有可无。,局部作用域,在块中声明的标识符,其作用域自声明处起,限于块中,例如: void fun(int a) int b(a); cinb; if (b0) int c; coutc; ,C的作用域,b的作用域,a的作用域,类作用域,类作用域作用于特定的成员名。 类X的成员M具有类作用域,对M的访问方式如下: 如果在X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以访问成员M。 通过表达式x.M或者X:M访问。 通过表达式prt-M。,7,4. 命名空间作用域,命名空间可以解决类名、函数名等的命名冲突 命名空间的声明
3、:namespace 命名空间名 函数声明、类声明、 例:namespace SomeNs class SomeClass . ; 特殊的命名空间 全局命名空间:默认的命名空间 匿名命名空间:对每个源文件是唯一的,命名空间作用域,一个命名空间确定了一个命名空间作用域 引用其它命名空间作用域中的标识符 命名空间名:标识符名 例:声明一个SomeClass型的对象 SomeNs:SomeClass obj1; 将其它命名空间作用域的标识符暴露于当前作用域 对指定标识符 using 命名空间名:标识符名; 对所有标识符 using namespace命名空间名;,8,可见性,标识符应声明在先,引用在
4、后 如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见 对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见 同一作用域中的同名标识符 在同一作用域内的对象名、函数名、枚举常量名会隐藏同名的类名或枚举类型名 重载的函数可以有相同的函数名,#include using namespace std; int i; /在全局命名空间中的全局变量 namespace Ns int j; /在Ns命名空间中的全局变量 int main() i = 5; /为全局变量i赋值 Ns:j = 6; /为全局变量j赋值 /子块1
5、 using namespace Ns; /当前块中可以直接引用Ns中的标识符 int i; /局部变量,局部作用域 i = 7; cout “i = “ i endl;/输出7 cout “j = “ j endl;/输出6 cout “i = “ i endl; /输出5 return 0; ,例题,5.2 对象的生存期,对象从产生到结束的这段时间就是它的生存期。在对象生存期内,对象将保持它的值直到被更新为止 静态生存期: 它的生存期与程序的运行期相同 在命名空间作用域中声明的对象具有这种生存期 在函数内部声明静态生存期对象,要加关键字static 动态生存期 块作用域中声明的,没有用st
6、atic修是的对象是动态生存期的对象(习惯称局部生存期对象) 开始于程序执行到声明点时,结束于命名该标识符的作用域结束处,生存期,整个程序运行期间都存在 声明时如没有赋初值,编译时自动初始化为0 不可被其他函数引用 在编译时赋初值,以后每次函数调用时不再赋初值,而是使用上一次函数调用结束后的值 例题:程序运行结果,#include using namespace std; int f() auto int b=0; static int c=0; b+; c+; cout“b=“b; cout“ c=“cendl; return(b+c); int main() int i; for(i=0;
7、i3;i+) coutf()endl; return 0; ,5.3 类的静态成员,静态成员:解决同一个类的不同对象之间数据和函数的共享 例如:雇员总数这个值为雇员类的所有对象所共享 静态数据成员 用关键字static声明 该类的所有对象维护该成员的同一个拷贝 必须在类外定义和初始化,用(:)来指明所属的类。,具有静态数据成员的 Point类,#include using namespace std; class Point public: Point(int xx=0, int yy=0); Point(Point ,int Point:countP=0; Point:Point(int x
8、x, int yy) X=xx; Y=yy; countP+; Point:Point(Point ,#include “iostream“ using namespace std; #include “point.h“ int main() Point p1(4,5),p2(A); p1.GetC(); Point p3; p3.GetC(); p2.GetC(); return 0; ,程序的运行结果为: Object id=2 Object id=3 Object id=2,静态成员函数,专门引用属于该类的静态数据成员或静态成员函数的函数 例如:定义了静态数据成员:雇员总数,但是该成员为
9、私有,必须定义公有函数成员来实现雇员总数加一、输出值等功能 类外代码可以使用类名和作用域操作符来调用静态成员函数,具有静态数据、函数成员的类,#include using namespace std; class Point public: Point(int xx=0,int yy=0) X=xx; Y=yy; countP+; Point(Point ,int main() Point:GetC(); /输出对象个数,类名引用 Point p1(4,5),p2(A); p1.GetC(); /输出对象个数,对象名引用 Point p3; p3.GetC(); p2.GetC(); /输出对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 共享 保护
链接地址:https://www.31doc.com/p-2566779.html