华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第4章 作用域及成员指针

第4章作用域及成员指针 4.1 作用域 4.2名字空间 4.3成员指针 4.4 const、volatile和mutable 4.5 引用对象
第4章 作用域及成员指针 4.1 作用域 4.2 名字空间 4.3 成员指针 4.4 const、volatile和mutable 4.5 引用对象

作用域 作用域: 标识符起作用的范围。作用域运算符:既 是单目运算符,又是双目运算符。优先级和结合 性同括号 ▣单目:用于限定全局标识符(类型名、变量名以及常量 名等) ·双目:用于限定类的枚举元素、数据成员、函数成员以 及类型成员等。双目运算符:还用于限定名字空间成 员,以及恢复自基类继承的成员的访问权限。 在类体外定义数据和函数成员时,必须用双目:限 定类的数据和函数成员,以便区分不同类之间的 同名成员
4.1 作用域 作用域:标识符起作用的范围。作用域运算符:: 既 是单目运算符,又是双目运算符。优先级和结合 性同括号。 单目::用于限定全局标识符 (类型名、变量名以及常量 名等 ) 双目::用于限定类的枚举元素、数据成员、函数成员以 及类型成员等。双目运算符::还用于限定名字空间成 员,以及恢复自基类继承的成员的访问权限。 在类体外定义数据和函数成员时,必须用双目:: 限 定类的数据和函数成员,以便区分不同类之间的 同名成员

作用域 作用域分为面向过程的作用域(C传统的作用域)和 面向对象的作用域。 面向过程的:词法单位的作用范围从小到大可以分为四 级:①作用于表达式内,②作用于函数内,③作用于程 序文件内,④作用于整个程序。 面向对象的:词法单位的作用范围从小到大可以分为五 级:①作用于表达式内,②作用于函数成员内,③作用 于类或派生类内,④作用于基类内,⑤作用于虚基类 内。 ■ 标识符的作用域越小,访问的优先级别就越高。 当函数成员参数和数据成员名称相同时,优先访 问的是函数成员的参数
4.1 作用域 作用域分为面向过程的作用域(C传统的作用域 ) 和 面向对象的作用域。 面向过程的:词法单位的作用范围从小到大可以分为四 级:①作用于表达式内,②作用于函数内,③作用于程 序文件内,④作用于整个程序。 面向对象的:词法单位的作用范围从小到大可以分为五 级:①作用于表达式内,②作用于函数成员内,③作用 于类或派生类内,④作用于基类内,⑤作用于虚基类 内。 标识符的作用域越小,访问的优先级别就越高。 当函数成员参数和数据成员名称相同时,优先访 问的是函数成员的参数

4.1作用域 【例4.1】定义二维及三维坐标上的点的类型。 class POINT2D{ 1定义二维坐标点 ■ int x,yi public: int getx(); //获得点的x轴坐标 POINT2D(intX,inty)X//intx访问优先于数据成员x ■ POINT2D:X=x; //POINT2D:x为类的数据成员x POINT2D:y=yi } ▣i
4.1 作用域 【例4.1】定义二维及三维坐标上的点的类型。 class POINT2D{ //定义二维坐标点 int x, y; public: int getx( ); //获得点的 x轴坐标 POINT2D (int x, int y){ // int x访问优先于数据成员 x POINT2D::x=x; //POINT2D::x为类的数据成员 x POINT2D::y=y; } };

4.1 作用域 class POINT3D{ /川定义三维坐标点 int x,y,zi public: int getx(); /获得点的x轴坐标 POINT3D (int x,int y,int z) POINT3D::X=X; //POINT:3D:x为类的数据成员x ■ POINT3D:y=yi POINT3D:z=Z } i
4.1 作用域 class POINT3D{ //定义三维坐标点 int x, y, z; public: int getx( ); //获得点的 x轴坐标 POINT3D (int x, int y, int z){ POINT3D::x=x; //POINT3D::x为类的数据成员 x POINT3D::y=y; POINT3D::z=z; } };

4.1作用域 /I以下代码在类的体外定义getx(),用:限定getx所属的类 int POINT2D::getx(){return x;} int POINT3D::getx(){return x;} ■ static int x; //C作用域:当前程序文件 void main(int argc,char *argv[]) POINT2D p(3,5); ■ x=p.POINT2D::getx(); ■ x=p.getx()i/等价于x=p.POINT2D:get(): x=POINT2D(4,7).getx(); /以上常量POINT2D(4,7)的作用域局限于表达式 ■}
4.1 作用域 //以下代码在类的体外定义getx( ),用::限定getx所属的类 int POINT2D::getx( ) {return x;} int POINT3D::getx( ) {return x;} static int x; //C作用域:当前程序文件 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作用域 例4.2】用链表定义容量无限的栈。 #include 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); i STACK:NODE:NODE(intv)K//:自左向右结合 ■ val=v; next=0;
4.1 作用域 例4.2】用链表定义容量无限的栈。 #include 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; }

.1作用域 【例4.3】定义用于进程管理的类。 static int processes:=1;/总的进程数 extern int fork(); /声明类库提供的fork函数 class Process ■ int processes; //本进程fork的进程数 ■ public: ■ int fork(); ■ i ■ int Process::fork( ■ processes++; //访问数据成员processes processes++; //访问全局变量processes ◆ return fork(); //调用类库中的fok函数 }
4.1 作用域 【例4.3】定义用于进程管理的类。 static int processes=1; //总的进程数 extern int fork( ); //声明类库提供的fork函数 class Process{ int processes; //本进程fork的进程数 public: int fork( ); }; int Process::fork( ){ processes++; //访问数据成员processes ::processes++; //访问全局变量processes return ::fork( ); //调用类库中的fork函数 }

4.1作用域 注意: 。单目运算符:可以限定存储类为static和extern的全局变 量、函数、类型以及枚举元素等。 当同一作用域的标识符和类名同名时,可以用class、 struct和union限定标识符为类名。 【例4.4】定义一个部门的职员。 #include ■ class CLERK char *CLERK; //数据成员CLERK记录职员姓名 :CLERK *next; //等价于class CLERK*next public:
4.1 作用域 注意: 单目运算符::可以限定存储类为static 和extern的全局变 量、函数、类型以及枚举元素等。 当同一作用域的标识符和类名同名时,可以用class 、 struct 和union限定标识符为类名。 【例4.4】定义一个部门的职员。 #include class CLERK{ char *CLERK; //数据成员CLERK记录职员姓名 ::CLERK *next; //等价于class CLERK *next public:

4.1作用域 CLERK(char*s,:CLERK*n)//等价于class CLERK*n ■ H ■ /以下class CLERK:避免访问数据成员char*CLERK ■ CLERK::CLERK(char *name,class CLERK *next=0) CLERK=new char[strlen(name)+1]; strcpy(CLERK,name); ■ CLERK::next=next; /CLERK:next限定访问数据成员 ■ } ■ int CLERK; /定义整型变量CLERK class CLERK w(Wan”,&n);//省略class时类名和变量名混淆
4.1 作用域 CLERK(char *s, ::CLERK*n);//等价于 class CLERK *n }; //以下class CLERK避免访问数据成员char *CLERK CLERK::CLERK(char *name, class CLERK *next=0) { CLERK=new char[strlen(name)+1]; strcpy(CLERK ,name); CLERK::next=next; //CLERK:: next限定访问数据成员 } int CLERK; //定义整型变量CLERK class CLERK w( “Wan ”, &n);//省略class时类名和变量名混淆
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第3章 C++的类.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第2章 C++的变量、类型及函数.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第1章 引论(李瑞轩).pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)课程简介(李瑞轩).pdf
- 南京大学:《软件工程导论 Introduction to Software Engineering Research》课程教学电子教案(课件讲义)04 Conduct Rigorous and Scientific Research(Experiment Design in Software Engineering Research).pdf
- 《编译原理 Principles and Techniques of Compilers》课程教学资源(学习资料)Assemblers,Linkers,and the SPIM Simulator(MIPS32 and SPIM).pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验四 目标代码生成.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验三 中间代码生成.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验二 语义分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验一 词法分析与语法分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)编译课程复习(许畅).pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第一章 引论(许畅).pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第三章 词法分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第四章 语法分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第五章 语法制导的翻译.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第六章 中间代码生成.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第七章 运行时刻环境.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第八章 代码生成.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第九章 机器无关的优化.pdf
- 中国科学技术大学:Robust Speech Recognition with Speech Enhanced Deep Neural Networks.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第5章 静态成员与友元.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第6章 单继承类.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第7章 虚函数(李瑞轩).pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第8章 多继承类.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第9章 运算符重载.pdf
- 哈尔滨学院:《程序设计(C语言》课程教学大纲(理工类)Program Design(C language).pdf
- 运城学院:《微机原理与接口技术》课程教学大纲 Principles and Application of Micro-Computer(赵润林、朱铭琳、王晓丽).pdf
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题1.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题2 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题2.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题1 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题3.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题4 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题4.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题3 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题5.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题5 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题6 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题6.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题7.doc