用户名: 密码: 免费注册 忘记密码? 网站地图 | 加入收藏 | 设为首页
首页 | 新闻 | 工具 | 系统 | 办公 | 聊天 | 多媒体 | 网页 | 运营 | 平面 | 欣赏 | 数据库 | 程序 | 服务器 | 组网
网页 | 3dmax | Ghost | Windows Xp| Dreamweaver | photoshop | Flash | office | Alexa | Css | QQ | Asp | PHP | Jsp | Access
Flash MX 2004入门 | 网站推广策略 | CorelDRAW入门 | ASP学习 | 网站建设大师功 | Word入门
  iTbulo.com > 学院 > 正文
c++面向对象的编程入门篇-----类(class)
iTbulo.COM 2006-4-5 管宁()

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

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


//程序作者:管宁
//站点: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++规定:

1.一个名字不能同时设置为两种不同的类型

class test
{
//...
};
typedef int test;
这个就是错误的!

2.非类型名(变量名,常量名,函数名,对象名,枚举成员)不能重名.

test a;

void a();
就是错误的,因为a是一个test类的对象,它和函数a名称重名了!

3.类型与非类型不在同一个名字空间上,可以重名,即使在同一作用域内,但两者同时出现时定义类对象的时候要加上前缀class以区分类型和非类型名!
class test
{
//.....
}

int test

class test a;//利用class前坠区分,定义了一个test类的对象a


好了,到这里关于类的知识点我们已经学习完,希望大家多多练习

上一页  [1] [2] [3] 

文章搜索
相关资讯
相关文章 相关下载
C与C++中标准输入实现方式上的一点区别
将成员函数指针强制转换成void*指针
C与C++中标准输入实现方式上的一点区别
为C++标准库容器写自己的内存分配程序
缓冲区溢出还是问题吗?C++/CLI安全编码
焦点信息