首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 计算机等级考试 > 计算机二级 > C加加 > 复习资料 > 正文

计算机等考C++辅导笔记:类对象数组和静态成员

考试吧整理了“计算机等考二级C++辅导笔记”,帮助考生备考。

  二、静态成员

  可以把类的成员声明为静态的。静态成员只能存在唯一的实例。所有的成员函数都可以访问这个静态成员。即使没有声明类的任何实例,静态成员也已经是存在的。不过类当中声明静态成员时并不能自动定义这个变量,必须在类定义之外来定义该成员。

  1.静态数据成员

  静态数据成员相当于一个全局变量,类的所有实例都可以使用它。成员函数能访问并且修改这个值。如果这个静态成员是公有的,那么类的作用域之内的所有代码(不论是在类的内部还是外部)都可以访问这个成员。下面的程序通过静态数据成员来记录链表首项和末项的地址。

  #include iostream.h

  #include string.h

  class ListEntry

  {

  public:

  static ListEntry* firstentry;

  private:

  static ListEntry* lastentry;

  char* listvalue;

  ListEntry* nextentry;

  public:

  ListEntry(char*);

  ~ListEntry() { delete [] listvalue;}

  ListEntry* NextEntry() const { return nextentry; };

  void display() const { cout< };

  ListEntry* ListEntry::firstentry;

  ListEntry* ListEntry::lastentry;

  ListEntry::ListEntry(char* s)

  {

  if(firstentry==0) firstentry=this;

  if(lastentry!=0) lastentry->nextentry=this;

  lastentry=this;

  listvalue=new char[strlen(s)+1];

  strcpy(listvalue,s);

  nextentry=0;

  }

  int main()

  {

  while (1)

  {

  cout<<\nEnter a name ('end' when done): ;

  char name[25];

  cin>>name;

  if(strncmp(name,end,3)==0) break;

  new ListEntry(name);

  }

  ListEntry* next = ListEntry::firstentry;

  while (next != 0)

  {

  next->display();

  ListEntry* hold = next;

  next=next->NextEntry();

  delete hold;

  }

  return 0;

  }

  程序首先显示提示信息,输入一串姓名,以end作为结束标志。然后按照输入顺序来显示姓名。构造函数将表项加入链表,用new运算符来声明一个表项,但并没有把new运算符返回的地址赋值给某个指针,这是因为构造函数会把该表项的地址赋值给前一个表项的nextentry指针。

  这个程序和前面将的逆序输出的程序都不是最佳方法,最好的方法是使用类模板,这在后面再介绍。

  main()函数取得ListEntry::firstentry的值,开始遍历链表,因此必需把ListEntry::firstentry设置成公有数据成员,这不符合面向对象程序的约定,因为这里数据成员是公有的。

  2.静态成员函数

  成员函数也可以是静态的。如果一个静态成员函数不需要访问类的任何实例的成员,可以使用类名或者对象名来调用它。静态成员通常用在只需要访问静态数据成员的情况下。

  静态成员函数没有this指针,因为它不能访问非静态成员,所以它们不能把this指针指向任何东西。

  下面的程序中,ListEntry类中加入了一个静态成员函数FirstEntry(),它从数据成员firstentry获得链表第一项的地址,在这儿,firstentry已经声明为私有数据成员了。

  #include iostream.h

  #include string.h

  class ListEntry

  {

  static ListEntry* firstentry;

  static ListEntry* lastentry;

  char* listvalue;

  ListEntry* nextentry;

  public:

  ListEntry(char*);

  ~ListEntry() { delete [] listvalue;}

  static ListEntry* FirstEntry() { return firstentry; }

  ListEntry* NextEntry() const { return nextentry; };

  void display() const { cout< };

  ListEntry* ListEntry::firstentry;

  ListEntry* ListEntry::lastentry;

  ListEntry::ListEntry(char* s)

  {

  if(firstentry==0) firstentry=this;

  if(lastentry!=0) lastentry->nextentry=this;

  lastentry=this;

  listvalue=new char[strlen(s)+1];

  strcpy(listvalue, s);

  nextentry = 0;

  }

  int main()

  {

  while (1)

  {

  cout<<\nEnter a name ('end' when done):;

  char name[25];

  cin >> name;

  if(strncmp(name,end,3)==0) break;

  new ListEntry(name);

  }

  ListEntry* next = ListEntry::FirstEntry();

  while (next != 0)

  {

  next->display();

  ListEntry* hold = next;

  next = next->NextEntry();

  delete hold;

  }

  return 0;

  }

  函数ListEntry::FirstEntry()是静态的,返回静态数据成员firstentry的值。

  3.公有静态成员

  如果一个静态成员象上面程序一样是公有的,那么在整个程序中都可以访问它。可以在任何地方调用公有景泰成员函数,而且不需要有类的实例存在。但公有静态成员函数不完全是全局的,它不仅仅存在于定义类的作用域内。在这个作用域里面,只要在函数名前加上类名和域解析运算符::就可以调用该函数。

  相关推荐:2010年9月计算机等级考试试题及答案解析专题

       预告:名师解析2010年9月计算机等级考试试题答案

       2010年9月计算机等级考试成绩查询时间及入口

文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。