C++构造函数和析构函数

  构造函数简介函数

  在上一个章节咱们在建立好类的对象以后,首先对它的每个成员属性赋值以后再对它们进行输出操做,若是不赋值就输出,这些值就会是垃圾值。而为了代码的简介,一次性为全部成员属性初始化,C++的类提供了这样的一个函数构造函数。spa

  C++提供构造函数来处理对象的初始化设计

  1.构造函数是一种特殊的成员函数,不须要用户来调用,定义对象时被自动执行。对象

  2.构造函数名字与类名相同,无返回类型。blog

  3.能够由用户本身定义实现,根据须要设计对数据成员进行初始化,依旧能够设置函数的默认参数。生命周期

  4.若是咱们没有定义构造函数,系统会为咱们自动定义一个无参的默认构造函数的,它不对成员属性作任何操做,若是咱们本身定义了构造函数,系统就不会为咱们建立默认构造函数了。内存

  默认参数构造函数get

  CTime() { }class

  带参数的构造函数:这样的一个构造函数提供了一个三个成员属性的初始化,声明对象的时候就能够传入参数了。构造函数

  CTime time(Hour ,Minute, Second )//对象的定义

  CTime(int Hour ,int Minute,int Second ) {

  m_nHour=Hour; m_nMinute=Minute; m_nSecond=Second; }

  在有了构造函数以后,咱们声明时传入参数调用的构造函数等同于下面注释的代码。此时由于已经没有了默认的构造函数,就不能再想上一个章节那样不传入参数进行对象的建立了。

  构造函数的重载

  在一个类中能够有多个构造函数,它们构成了函数的重载。

  下面两个构造函数构成了重载,咱们能够在声明对象的时候传入不一样的参数调用不一样的构造函数。此时能够依旧像上一个章节那样对象不传入任何参数,也不须要再对它们一一初始化,这一切都有构造函数作了。对象在建立的时候会根据传入参数的类型来调用不一样的构造函数,这和普通函数的调用是一致的。

  这是一个含有默认参数的构造函数,默认参数的函数的使用和咱们在函数那一章的规则是同样的。

  中间的构造函数的全部参数都有默认值,这样是不能够的,在有三个构造函数的状况下,咱们建立一个没有传入参数的对象的时候,它是应该调用第一个无参的默认构造函数呐?仍是第二个符合默认参数规则的构造函数呐?这样就形成了二义性,是不能够的。

  析构函数简介

  它的做用与构造函数相反,通常是执行对象的清理工做,当对象的生命周期结束的时候,会自动的调用。析构函数的做用并非删除对象,在对象撤销它所占用的内存以前,作一些清理的工做。清理以后,这部份内存就能够被系统回收再利用了。在设计这个类的时候,系统也会默认的提供一个析构函数。在对象的生命周期结束的时候,程序就会自动执行析构函数来完成这些工做。同构造函数,用户本身定义,系统自动调用。

  1.析构函数没有返回值,没有参数;

  2.没有参数,因此不能重载,一个类仅有一个析构函数;

  3.析构函数除了释放工做,还能够作一些用户但愿它作的一些工做,好比输出一些信息。

  它的命名规则以下:

  ~CTime();

  定义以下:这个析构函数为了显示它在何时被调用,咱们利用它输出一句话以告知咱们它被调用了。

  运行结果以下:咱们在main函数里面建立了四个CTime对象,因此在退出main函数以后,四个对象的生命周期结束,析构函数被调用了四次。若是咱们是在main函数的外面建立的对象,这个对象的销毁是在咱们退出程序以后。析构函数销毁对象的顺序与构建对象的顺序是相反的。由于对象的存储是在栈中的,栈的特性就是先进后出。

  若是咱们使用new运算符来动态的建立一个对象,这个对象是不会自动被销毁的,咱们须要手动使用delete销毁,这个时候析构函数随着delete的使用而被调用,在程序结束的时候就不会再销毁这个对象了。

 

原文连接:http://www.maiziedu.com/wiki/cplus/structure/

相关文章
相关标签/搜索