zoukankan      html  css  js  c++  java
  • 初学C++-----------------类的构造函数、析构函数

    1、构造函数

    特征:

      1)与类名同名。

      2)无函数返回类型说明。

      3)主要是完成对象的初始化。

      4)当一个新的对象被建立时(a.在对象的说明语句中 b.用new函数新建一个动态对象时),系统自动调用其相应的构造函数。

      5)可有多个构造函数(重载):多个构造函数的函数名相同,但是其形参在数据类型或数量上有差异,系统会根据参数的性质和个数来选择合适的构造函数。

      6)构造函数一定是公有函数。

      7)构造函数的执行是在系统创建对象时自动执行的。

    定义构造函数的一般形式为:

    class 类名

    {

      public:

        类名(形参列表);//构造函数原型

        其他成员

    };

    类名::类名(形参表)

    {

      函数体

    }

    默认的构造函数:

    若某个类定义中未给出显式的构造函数,则系统自动给出一个默认的构造函数:

        <类名> (void)

          {

          }

    若类定义了构造函数,则系统不提供默认的构造函数,此时,若还想要一个无参数的构造函数,则需用户另行定义。

    当构造函数的参数具有默认值时,称为具有缺省参数的构造函数。使用默认值时需注意:

    1)只能出现在类定义的接口部分,而不能出现在类定义的实现部分。

    2)所有具有默认值的参数必须处在参数表的最右边。

    3)  在使用具有缺省参数的构造函数时,要防止二义性。

     1 class sample    
     2 
     3 { private:
     4 
     5   int x,y,z;
     6 
     7   public:
     8 
     9   sample();//类sample的构造函数
    10 
    11   sample(int i, int j, int k=10);  //构造函数的重载,默认值只能出现在此处定义部分,而不能出现在下面的实现部分(第19行),且由于k有默认值,i,j没有,故k必须                                                位于i,j右侧
    12 
    13 };
    14 
    15 sample:: sample()     
    16 
    17 {   x=1; y=2;z=5;  }
    18 
    19 sample:: sample(int i, int j, int k)  
    20 
    21 {   x=i;y=j;z=k; }
    22 
    23 void main()
    24 
    25 {  
    26 
    27      sample x(20,30,80);
    28 
    29      sample y;    //产生二义性
    30 
    31 }

    2、析构函数

    特征:

    1)函数名为:~类名。

    2)无函数返回类型说明且无参数,不能随意调用,没有重载。

    3)完成对象撤销前的善后工作。

    4)当对象退出其说明区域,或使用delete释放动态对象时,系统自动调用其析构函数。如果用户未定义析构函数,则系统会生成和调用一个默认的析构函数。

    5)一个类只有一个析构函数,也可缺省。

    6)对象被析构的顺序与其建立的顺序正好相反。

    7)当在构造函数中用new运算符为类的数据成员动态分配内存时,则相应地在析构函数中必须用delete运算符释放该内存。

  • 相关阅读:
    记录一下最近面试的总结
    网络模块相关面试题
    JVM 之类加载器
    一段简单的关于字符串的 Java 代码竟考察了这么多东西
    LeetCode 链表题 ( Java )
    MD5 加盐加密
    SpringMVC 学习笔记
    [redis]dict和rehash
    [redis]SDS和链表
    [go]包和工程管理
  • 原文地址:https://www.cnblogs.com/yuanfy/p/3893547.html
Copyright © 2011-2022 走看看