加入收藏 收藏网站 设为首页 设为首页
招生考试网
学历类| 阳光高考 研 究 生 自学考试 成人高考 专 升 本 中考会考 外语类| 四 六 级 职称英语 商务英语 公共英语 日语能力
资格类| 公 务 员 报 关 员 银行从业 司法考试 导 游 证 教师资格 财会类| 会 计 证 经 济 师 会计职称 注册会计 税 务 师
工程类| 一级建造 二级建造 造 价 师 造 价 员 咨 询 师 监 理 师 医学类| 卫生资格 执业医师 执业药师 执业护士 国际护士
计算机| 等级考试 软件水平 应用能力 其它类| 书画等级 美国高考 驾 驶 员 书法等级 少儿英语 报 检 员 单 证 员 出国留学
 招生考试网 - 计算机等级考试 - 考试辅导 - 计算机二级 - 正文

 
2011年计算机二级C++笔记:类的设计、构造函数和析构函数
来源:fjzsksw.com 2010-11-2 编辑:zhanghaifeng 【字体:小 大】
2011年计算机二级C++笔记:类的设计、构造函数和析构函数

 

 二、构造函数

  什么是构造函数?通俗的讲,在类中,函数名和类名相同的函数称为构造函数。上面的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;

  }

  };

  三、析构函数

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

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

 

 



 
网站版权与免责声明
①由于各方面情况的不断调整与变化,本网所提供的相关信息请以权威部门公布的正式信息为准.
②本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权等问题,请在两周内来电联系.
推荐文章
  • 此栏目下没有推荐文章
  • 热门文章

    报名考试
    全国 | 黑龙江 | 吉林 | 辽宁 | 内蒙古
    青海 | 宁夏 | 甘肃 | 新疆 | 陕西
    西藏 | 北京 | 天津 | 河北 | 山东
    江苏 | 安徽 | 河南 | 上海 | 浙江
    福建 | 广东 | 山西 | 湖南 | 湖北
    江西 | 广西 | 海南 | 云南 | 贵州
    四川 | 重庆
    分省高校计算机考试
    黑龙江 | 吉林 | 辽宁 | 内蒙古 | 河北
    北京 | 天津 | 新疆 | 甘肃 | 宁夏
    青海 | 陕西 | 山西 | 河南 | 山东
    江苏 | 安徽 | 浙江 | 福建 | 广东
    海南 | 广西 | 江西 | 湖北 | 湖南
    四川 | 上海 | 重庆 | 贵州 | 云南
    西藏
    成绩查询
    报考指南
    试题答案
    模拟试题
    考试辅导
    计算机一级 | 计算机二级 | 计算机三级 | 计算机四级
    经验交流
    高校计算机