求学快递网是国内领先的B2M2C教育培训网上信息平台!

首页 | 分站加盟 | 课程发布 | 最新课程 | 最新机构 | 培训专题 | 全国分站 | 帮助中心

计算机等级考试_计算机等级考试报名_计算机考试成绩查询_求学快递网

计算机等级考试一步到位
您的位置:求学快递网 > 计算机等级考试 > 考试辅导 > 计算机二级 > 计算机C++知识点:静态成员 - 正文内容

计算机C++知识点:静态成员

计算机C++知识点:静态成员

 

求学快递网计算机等级考试专题重点推荐:2016年计算机级考试报考时间 2016年计算机二级考试证书领取时间2016年计算机二级考试报考指南2016年计算机二级考试大纲2016年计算机二级考试政策2016年计算机二级考试报考条件2016年计算机二级考试科目等最新新闻资讯。

 

静态成员
  可以把类的成员声明为静态的。静态成员只能存在唯一的实例。所有的成员函数都可以访问这个静态成员。即使没有声明类的任何实例,静态成员也已经是存在的。不过类当中声明静态成员时并不能自动定义这个变量,必须在类定义之外来定义该成员。 
   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.公有静态成员 
  如果一个静态成员象上面程序一样是公有的,那么在整个程序中都可以访问它。可以在任何地方调用公有景泰成员函数,而且不需要有类的实例存在。但公有静态成员函数不完全是全局的,它不仅仅存在于定义类的作用域内。在这个作用域里面,只要在函数名前加上类名和域解析运算符::就可以调用该函数。

 

 

 

关注求学快递网计算机等级考试专题,帮你了解最新的2016年计算机二级考试资讯服务2016计算机二级考试成绩查询,让你轻松备考计算机等级考试!

求学快递网计算机等级考试专题的小编们根据网民搜索喜爱,第一时间公布2016年计算机二级模拟试题2016年计算机二级考试应试技巧计算机二级考试历年真题2016年计算机二级考试章节复习供广大求学爱好者学习使用,欢迎继续关注求学快递网计算机等级考试专题,并给我们提供宝贵的意见!

 

相关推荐

计算机等级考试最新机试技巧
计算机等级考试高效利用技巧

最新计算机资讯

热点专题

计算机等级考试经验技巧分享

关于本站  诚征英才  广告服务  招生服务  免责声明  分站加盟  VIP会员  联系我们  网站地图  网站记事

版权所有 CopyRight 2008-2017 粤ICP备14009694号 www.studyems.com, Inc. All Rights Reserved
违法和不良信息举报邮箱:2881796407@qq.com 举报电话: