电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> C++/VC>>c++面向对象的编程入门篇-----类(class)五:

c++面向对象的编程入门篇-----类(class)五

来源:远方网络 | 2006-1-6 | (有2696人读过)

下面我们说一下关于类的作用域。

在说内容之前我们先给出这部分内容的一个完整代码,看讲解的是参照此一下代码!




//程序作者:管宁
//站点: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进行了赋值操作!

C++/VC热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号