分类 公告通知 成绩职位表 考前培训 模拟真题 热点.资讯 申论.行测

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


   >>学课在线网课试听.报名        >>学课在线智能题库.模拟做题       >>直播课程       >>录播课程

课程名称
课程免费试听
课程名称
课程免费试听
课程名称
课程免费试听
初级会计师

一级建造师

执业药师

中级会计师

二级建造师

护士资格证

注册会计师

一级造价工程师

健康管理师

经济师考试

监理工程师

考研辅导课

银行从业

安全工程师

自考课程

基金从业

一级消防工程师

心理咨询师

企业人力资源管理师

法律职业资格考试

公共营养师

社会工作者

消防设施操作员

保育员

教师资格证

成人高考

育婴师

公务员培训

文职培训

英语四六级

计算机软考
养老护理员
税务师培训

房产经纪人
咨询工程师

其它课程>>



重要提醒!!内容中联系方式并非本站联系方式,报名咨询的学员请与下面最新联系方式联系我们咨询报名-以免损失!
>>长期招聘兼职招生代理人员,项目合作,团报优惠咨询,有意者请联系我们 >>咨询:13312524700(可加微信)。

昆明学历中心:◆咨询电话:0871-65385921、13312528471 赖老师、钱老师(微信报名:17787865775)点击这里给我发消息


云南地州中心:◆咨询电话:0871-65385921、17787865775 冯老师、 王老师(微信报名:17787865775)点击这里给我发消息


总部报名地址: ◆昆明市-五华区教场东路莲花财富中心10楼;网课试听:ke.xuekaocn.cn   点击这里立即咨询我们



地州分校:   大理分校   丽江分校   迪庆分校   怒江分校   红河分校   临沧分校   玉溪分校   文山分校   保山分校   德宏分校   昭通分校   普洱分校   版纳分校 【各地州学员请加老师微信咨询报名,电话(微信):133-1252-4700】;2021年云南省成人高考>>立即报名



职业技能考证:心理咨询师、健康管理师、茶艺师等更多>◆咨询电话:133 1252 4700(微信)点击这里咨询我们  

公考培训咨询:◆国考云南省考公务员/事业单位面授培训,咨询电话:133 1252 4700 (微信)点击这里立即咨询我们






温馨提示:因考试政策、内容不断变化与调整,学课在线网提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

免责声明:以上内容仅代表原创者观点,其内容未经本站证实,学课在线网对以上内容的真实性、完整性不作任何保证或承诺,转载目的在于传递更多信息,由此产生的后果与学课在线网无关;如以上转载内容不慎侵犯了您的权益,请联系我们QQ:1536696595,我们将会及时处理。




网友评论