来源:远方网络 | 2006-1-6 | (有2823人读过)
下面我们说一下关于类的作用域。
在说内容之前我们先给出这部分内容的一个完整代码,看讲解的是参照此一下代码!
//程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者
#include <iostream> using namespace std; class ballscore { protected: const static int gbs = 5;//好球单位得分 const static int bbs = -3;//坏球单位扣分 float gradescore;//平均成绩 public: float GetGS(float goodball,float badball)//goodball为好球数量,badball为坏求数量 { int gradescore=0;//新定义一个和成员变量float gradescore相同名字的类成员函数局部变量 ballscore::gradescore = (goodball*gbs + badball*bbs) / (goodball + badball);//由于局部变量与类成员变量同名使用的时候必须在其前加上类名和域区分符 return ballscore::gradescore;//返回平均成绩 } }; int ballscore=0;//定义一个与类名称相同的普通全局变量 int test; void main() { class test//局部类的创建 { float a; float b; }; test test; ::test=1;//由于局部类名隐藏了外部变量使用需加域区分符 class ballscore jeff;//由于全局变量int ballsocre和类(ballsocre)名称相同,隐藏了类名称,这时候定义类对象需加class前缀以区分 cout<<jeff.GetGS(10,3); cin.get(); }
类的作用域是只指定义和相应的成员函数定义的范围,在该范围内,一个类的成员函数对同一类的数据成员具有无限制的访问权。
在类的使用中,我们经常会碰到以下三种情况:
1.类的成员函数的局部变量隐藏了类的同名成员变量,看如对上面程序的分析。
protected: const static int gbs = 5; const static int bbs = -3; float gradescore; public: float GetGS(float goodball,float badball) { int gradescore=0; ballscore::gradescore = (goodball*gbs + badball*bbs) / (goodball + badball); return ballscore::gradescore; }
代码中的int gradescore就把float gradescore给隐藏了,所以要使用成员变量float gradescore的时候必须在其之前加上类名称和域区分符(::)。
2.在类定义外部非类型名隐藏了类型名称的情况,看上面代码的分析!
class ballscore {
protected: const static int gbs = 5; const static int bbs = -3; float gradescore; public: float GetGS(float goodball,float badball) { int gradescore=0; ballscore::gradescore = (goodball*gbs + badball*bbs) / (goodball + badball); return ballscore::gradescore; }
}; int ballscore=0;
代码中的全部变量int ballscore隐藏了类名称class ballscore
所以在main中如如果要定义ballscore类的对象就要在类名称前加上class关键字
class ballscore jeff;
3.类型名称隐藏了非类型名称,看对上面代码的分析!
int test; void main() { class test { float a; float b; }; test test; ::test=1; class ballscore jeff; cout<<jeff.GetGS(10,3); cin.get(); }
在普通函数内部定义的类叫做局部类,代码中的test类就是一个局部类!
代码中的test类隐藏了全局变量test如果要操作全局变量test那么就要在test前加上域区分符号(::),进行使用!
::test=1就是对全局变量test进行了赋值操作!
|