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 <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); i STACK:NODE:NODE(intv)K//:自左向右结合 ■ val=v; next=0;
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; }
.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<string.h> ■ class CLERK char *CLERK; //数据成员CLERK记录职员姓名 :CLERK *next; //等价于class CLERK*next public:
4.1 作用域 注意: 单目运算符::可以限定存储类为static 和extern的全局变 量、函数、类型以及枚举元素等。 当同一作用域的标识符和类名同名时,可以用class 、 struct 和union限定标识符为类名。 【例4.4】定义一个部门的职员。 #include<string.h> 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时类名和变量名混淆