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

2016年计算机二级《C++》复习资料:类的设计等

来源:考试吧 2015-12-15 9:15:34 考试吧:中国教育培训第一门户 模拟考场
考试吧整理“2016年计算机二级《C++》复习资料:类的设计等”供考生参考。更多计算机等级考试相关信息请关注考试吧计算机等级考试网。

  点击查看:2016年计算机二级考试《C++》复习资料汇总  

类的设计、构造函数和析构函数

  一、类的设计

  1.类的声明

  class 类名

  {

  private: //私有

  ...

  public: //公有

  ...

  };

  2.类的成员

  一般在C++类中,所有定义的变量和函数都是类的成员。如果是变量,我们就叫它数据成员如果是函数,我们就叫它成员函数。

  3.类成员的可见性

  private和public访问控制符决定了成员的可见性。由一个访问控制符设定的可访问状态将一直持续到下一个访问控制符出现,或者类声明的结束。私有成员仅能被同一个类中的成员函数访问,公有成员既可以被同一类中的成员函数访问,也可以被其他已经实例化的类中函数访问。当然,这也有例外的情况,这是以后要讨论的友元函数。

  类中默认的数据类型是private,结构中的默认类型是public。一般情况下,变量都作为私有成员出现,函数都作为公有成员出现。

  类中还有一种访问控制符protected,叫保护成员,以后再说明。

  4.初始化

  在声明一个类的对象时,可以用圆括号()包含一个初始化表。

  看下面一个例子:

  #include iostream.h

  class Box

  {

  private:

  int height,width,depth; //3个私有数据成员

  public:

  Box(int,int,int);

  ~Box();

  int volume(); //成员函数

  };

  Box::Box(int ht,int wd,int dp)

  {

  height=ht;

  width=wd;

  depth=dp;

  }

  Box::~Box()

  {

  //nothing

  }

  int Box::volume()

  {

  return height*width*depth;

  }

  int main()

  {

  Box thisbox(3,4,5); //声明一个类对象并初始化

  cout< return 0;

  }

  当一个类中没有private成员和protected成员时,也没有虚函数,并且不是从其他类中派生出来的,可以用{}来初始化。(以后再讲解)

  5.内联函数

  内联函数和普通函数的区别是:内联函数是在编译过程中展开的。通常内联函数必须简短。定义类的内联函数有两种方法:一种和C语言一样,在定义函数时使用关键字inline。如:

  inline int Box::volume()

  {

  return height*width*depth;

  }

  还有一种方法就是直接在类声明的内部定义函数体,而不是仅仅给出一个函数原型。我们把上面的函数简化一下:

  #include iostream.h

  class Box

  {

  private:

  int height,width,depth;

  public:

  Box(int ht,int wd,int dp)

  {

  height=ht;

  width=wd;

  depth=dp;

  }

  ~Box();

  int volume()

  {

  return height*width*depth;

  }

  };

  int main()

  {

  Box thisbox(3,4,5); //声明一个类对象并初始化

  cout< return 0;

  }

  这样,两个函数都默认为内联函数了。

  二、构造函数

  什么是构造函数?通俗的讲,在类中,函数名和类名相同的函数称为构造函数。上面的Box()函数就是构造函数。C++允许同名函数,也就允许在一个类中有多个构造函数。如果一个都没有,编译器将为该类产生一个默认的构造函数,这个构造函数可能会完成一些工作,也可能什么都不做。

  绝对不能指定构造函数的类型,即使是void型都不可以。实际上构造函数默认为void型。

  当一个类的对象进入作用域时,系统会为其数据成员分配足够的内存,但是系统不一定将其初始化。和内部数据类型对象一样,外部对象的数据成员总是初始化为0。局部对象不会被初始化。构造函数就是被用来进行初始化工作的。当自动类型的类对象离开其作用域时,所站用的内存将释放回系统。

  看上面的例子,构造函数Box()函数接受三个整型擦黑素,并把他们赋值给立方体对象的数据成员。

  如果构造函数没有参数,那么声明对象时也不需要括号。

  1.使用默认参数的构造函数

  当在声明类对象时,如果没有指定参数,则使用默认参数来初始化对象。

  #include iostream.h

  class Box

  {

  private:

  int height,width,depth;

  public:

  Box(int ht=2,int wd=3,int dp=4)

  {

  height=ht;

  width=wd;

  depth=dp;

  }

  ~Box();

  int volume()

  {

  return height*width*depth;

  }

  };

  int main()

  {

  Box thisbox(3,4,5); //初始化

  Box defaulbox; //使用默认参数

  cout< cout<

  return 0;

  }

  2.默认构造函数

  没有参数或者参数都是默认值的构造函数称为默认构造函数。如果你不提供构造函数,编译器会自动产生一个公共的默认构造函数,这个构造函数什么都不做。如果至少提供一个构造函数,则编译器就不会产生默认构造函数。

  3.重载构造函数

  一个类中可以有多个构造函数。这些构造函数必须具有不同的参数表。在一个类中需要接受不同初始化值时,就需要编写多个构造函数,但有时候只需要一个不带初始值的空的Box对象。

  #include iostream.h

  class Box

  {

  private:

  int height,width,depth;

  public:

  Box() { //nothing }

  Box(int ht=2,int wd=3,int dp=4)

  {

  height=ht;

  width=wd;

  depth=dp;

  }

  ~Box();

  int volume()

  {

  return height*width*depth;

  }

  };

  int main()

  {

  Box thisbox(3,4,5); //初始化

  Box otherbox;

  otherbox=thisbox;

  cout< return 0;

  }

  这两个构造函数一个没有初始化值,一个有。当没有初始化值时,程序使用默认值,即2,3,4。

  但是这样的程序是不好的。它允许使用初始化过的和没有初始化过的Box对象,但它没有考虑当thisbox给otherbox赋值失败后,volume()该返回什么。较好的方法是,没有参数表的构造函数也把默认值赋值给对象。

  class Box

  {

  int height,width,depth;

  public:

  Box()

  {

  height=0;width=0;depth=0;

  }

  Box(int ht,int wd,int dp)

  {

  height=ht;width=wd;depth=dp;

  }

  int volume()

  {

  return height*width*depth;

  }

  };

  这还不是最好的方法,更好的方法是使用默认参数,根本不需要不带参数的构造函数。

  class Box

  {

  int height,width,depth;

  public:

  Box(int ht=0,int wd=0,int dp=0)

  {

  height=ht;width=wd;depth=dp;

  }

  int volume()

  {

  return height*width*depth;

  }

  };

  三、析构函数

  当一个类的对象离开作用域时,析构函数将被调用(系统自动调用)。析构函数的名字和类名一样,不过要在前面加上 ~ 。对一个类来说,只能允许一个析构函数,析构函数不能有参数,并且也没有返回值。析构函数的作用是完成一个清理工作,如释放从堆中分配的内存。

  我们也可以只给出析构函数的形式,而不给出起具体函数体,其效果是一样的,如上面的例子。但在有些情况下,析构函数又是必需的。如在类中从堆中分配了内存,则必须在析构函数中释放。

  相关推荐:

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

  各地2016年全国计算机等级考试费用汇总

  2016年计算机等级考试各级别报考适合专业类别

  考试吧特别策划:2016年计算机等级考试报考指南

文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。
Copyright © 2004- 考试吧计算机等级考试网 All Rights Reserved 
中国科学院研究生院权威支持(北京)
在线模拟试题
考证通关杀器
考试最新资讯
一次通关技巧