首页 - 网校 - 万题库 - 直播 - 雄鹰 - 团购 - 书城 - 模考 - 学习通 - 导航 - 510 -
首页考试吧网校万题库直播雄鹰510团购书城模考论坛实用文档作文大全宝宝起名
2015中考
法律硕士
2015高考
MBA考试
2015考研
MPA考试
在职研
中科院
考研培训
专升本
自学考试 成人高考
四 六 级
GRE考试
攻硕英语
零起点日语
职称英语
口译笔译
申硕英语
零起点韩语
商务英语
日语等级
GMAT考试
公共英语
职称日语
新概念英语
专四专八
博思考试
零起点英语
托福考试
托业考试
零起点法语
雅思考试
成人英语三级
零起点德语
等级考试
华为认证
水平考试
Java认证
职称计算机 微软认证 思科认证 Oracle认证 Linux认证
公 务 员
导游考试
物 流 师
出版资格
单 证 员
报 关 员
外 销 员
价格鉴证
网络编辑
驾 驶 员
报检员
法律顾问
管理咨询
企业培训
社会工作者
银行从业
教师资格
营养师
保险从业
普 通 话
证券从业
跟 单 员
秘书资格
电子商务
期货考试
国际商务
心理咨询
营 销 师
司法考试
国际货运代理人
人力资源管理师
广告师职业水平
卫生资格 执业医师 执业药师 执业护士
会计从业资格
基金从业资格
统计从业资格
经济师
精算师
统计师
会计职称
法律顾问
ACCA考试
初级会计职称
资产评估师
高级经济师
注册会计师
高级会计师
美国注册会计师
审计师考试
国际内审师
注册税务师
理财规划师
一级建造师
安全工程师
设备监理师
公路监理师
公路造价师
二级建造师
招标师考试
物业管理师
电气工程师
建筑师考试
造价工程师
注册测绘师
质量工程师
岩土工程师
注册给排水
造价员考试
注册计量师
环保工程师
化工工程师
暖通工程师
咨询工程师
结构工程师
城市规划师
材料员考试
消防工程师
监理工程师
房地产估价
土地估价师
安全评价师
房地产经纪人
投资项目管理师
环境影响评价师
土地登记代理人
宝宝起名
缤纷校园
实用文档
入党申请
英语学习
思想汇报
作文大全
工作总结
求职招聘 论文下载 直播课堂
您现在的位置: 考试吧 > 计算机等级考试 > 计算机二级考试 > C加加 > 复习资料 > 正文

2015年国家计算机二级C++考试复习资料(6)

来源:考试吧 2014-12-26 14:07:34 考试吧:中国教育培训第一门户 模拟考场
考试吧整理了“2015年国家计算机二级C++考试复习资料”,提供给各位考生备考,更多考试资料请持续关注考试吧计算机等级考试频道!

  点击查看:2015年国家计算机二级C 考试复习资料汇总

  二级C++辅导笔记:类对象数组和静态成员

  一、类对象数组

  类的对象和C++其他数据类型一样,也可以为其建立数组,数组的表示方法和结构一样。

  #include iostream.h

  class Date

  {

  int mo,da,yr;

  public:

  Date(int m=0,int d=0, int y=0) { mo=m; da=d; yr=y;}

  void display() const { cout < };

  int main()

  {

  Date dates[2];

  Date today(12,31,2003);

  dates[0]=today;

  dates[0].display();

  dates[1].display();

  return 0;

  }

  1.类对象数组和默认构造函数

  在前面已经说过,不带参数或者所有参数都有默认值的构造函数叫做默认构造函数。如果类中没有构造函数,编译器会自动提供一个什么都不做的公共默认构造函数 。如果类当中至少有一个构造函数,编译器就不会提供默认构造函数。

  如果类当中不含默认构造函数,则无法实例化其对象数组。因为实例花类对象数组的格式不允许用初始化值来匹配某个构造函数的参数表。

  上面的程序中,main()函数声明了一个长度为2的Date对象数组,还有一个包含初始化值的单个Date对象。接着把这个初始化的Date对象赋值给数组中第一个对象,然后显示两个数组元素中包含的日期。从输出中可以看到,第一个日期是有效日期,而第二个显示的都是0。

  当声明了某个类的对象数组时,编译器会为每个元素都调用默认构造函数。

  下面的程序去掉了构造函数的默认参数值,并且增加了一个默认构造函数。

  #include

  class Date

  {

  int mo, da, yr;

  public:

  Date();

  Date(int m,int d,int y) { mo=m; da=d; yr=y;}

  void display() const { cout < };

  Date::Date()

  {

  cout < mo=0; da=0; yr=0;

  }

  int main()

  {

  Date dates[2];

  Date today(12,31,2003);

  dates[0]=today;

  dates[0].display();

  dates[1].display();

  return 0;

  }

  运行程序,输出为:

  Date constructor running

  Date constructor running

  12/31/2003

  0/0/0

  从输出中可以看出,Date()这个默认构造函数被调用了两次。

  2.类对象数组和析构函数

  当类对象离开作用域时,编译器会为每个对象数组元素调用析构函数。

  #include iostream.h

  class Date

  {

  int mo,da,yr;

  public:

  Date(int m=0,int d=0,int y=0) { mo=m; da=d; yr=y;}

  ~Date() {cout < void display() const {cout< };

  int main()

  {

  Date dates[2];

  Date today(12,31,2003);

  dates[0]=today;

  dates[0].display();

  dates[1].display();

  return 0;

  }

  运行程序,输出为:

  12/31/2003

  0/0/0

  Date destructor running

  Date destructor running

  Date destructor running

  表明析构函数被调用了三次,也就是dates[0],dates[1],today这三个对象离开作用域时调用的。

  二、静态成员

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

  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.公有静态成员

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

  相关推荐:

  各地2015年计算机等级考试报名时间汇总

  各地2015年上半年计算机等级考试费用汇总

  2015年计算机二级C++模拟练习题及答案汇总

文章责编:luoyuting  
看了本文的网友还看了
文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。
Copyright © 2004- 考试吧计算机等级考试网 All Rights Reserved 
中国科学院研究生院权威支持(北京) 电 话:010-62168566 传 真:010-62192699