第4章 作用域及成员指针.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 作用域及成员指针

第4章 作用域及成员指针 本章内容: 4.1 作用域 4.2 名字空间 4.3 成员指针 4.4 const、volatile和mutable 4.5 引用对象 4.1 作用域 作用域:标识符起作用的范围。作用域运算符::既是单目运算符,又是双目运算符。其优先级和结合性与括号相同。 单目::用于限定全局标识符(类型名、变量名、函数名以及常量名等)。 双目::用于限定类的枚举元素、数据成员、函数成员以及类型成员等。双目运算符::还用于限定名字空间成员,以及恢复从基类继承的成员的访问权限。 在类体外定义数据和函数成员时,必须用双目::限定类的数据和函数成员,以便区分不同类之间的同名成员。 4.1 作用域 【例4.1】定义二维及三维坐标上的点的类型。 class POINT2D{ //定义二维坐标点 int x, y; public: //获得点的二维x轴坐标 int getx( ); POINT2D (int x, int y){ //int x访问优先于数据成员x POINT2D::x=x; //POINT2D::x为数据成员x POINT2D::y=y; } }; 4.1 作用域 //以下代码在类的体外定义getx( ),用::限定getx所属的类 int POINT2D::getx( ) {return x;} int POINT3D::getx( ) {return x;} static int x; void main(int argc, char *argv[ ]) { POINT2D p(3,5); x=p.POINT2D::getx( ); x=p.getx( ); //等价于x=p.POINT2D::getx( ); x=POINT2D(4,7).getx( ); //常量POINT2D(4,7)的作用域局限于表达式 } 4.1 作用域 作用域分为面向对象的作用域、面向过程的作用域(C传统的作用域,含被引用的名字空间及成员) 。 面向过程的:词法单位的作用范围从小到大可以分为四级:①作用于表达式内,②作用于函数内,③作用于程序文件内,④作用于整个程序。 面向对象的:词法单位的作用范围从小到大可以分为五级:①作用于表达式内,②作用于函数成员内,③作用于类或派生类内,④作用于基类内,⑤作用于虚基类内。 标识符作用域越小,被访问优先级就越高。当函数成员的参数和数据成员同名时,优先访问的是函数成员的参数。作用域层次:面向对象-面向过程。 4.1 作用域 【例4.2】用链表定义容量无限的栈。 #include iostream.h class STACK{ struct NODE{ int val; NODE *next; NODE(int v); }*head; public: STACK( ){head=0;} ~STACK( ); int push(int v); int pop(int v); }; STACK::NODE::NODE(int v){ //::自左向右结合 val=v; next=0; } 4.1 作用域 注意: 单目运算符::可以限定存储类型为static和extern的全局变量、函数、类型以及枚举元素等。 【例4.3】 当同一作用域的标识符和类名同名时,可以用class、struct和union限定标识符为类名。 【例4.4】 4.2 名字空间 名字空间是C++引入的一种新作用域,类似于面向对象的包、类簇、主题等概念。不同的是C++的名字空间既面向对象又面向过程。 名字空间必须在全局作用域内用namespace定义,不能在函数及函数成员内定义,最外层名字空间名称必须在全局作用域唯一。 同一名字空间中的标识符名必须唯一,不同名字空间中的标识符名可以相同。当一个程序引用多个名字空间的同名成员时,可以用名字空间加作用域运算符限定。 4.2 名字空间 名字空间(包括匿名名字空间)可以分多次定义: 可以先在初始定义中定义一部分成员,然后在扩展定义中再定义另一部分成员; 或者先在初始定义中声明的函数原型,然后在扩展定义中再定义函数体; 初始定义和扩展定义的语法格式相同。 保留字using用于指示程序要引用的名字空间,或者用于声明程序要引用的名字空间成员。 在引用名字空间的某个成员之前,该成员必须已经在名字空间中声明了原型或进行了定义。 4.2 名字空间

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档