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

    这段时间学习了C++的一些知识,和其他编程语言一样,C++同样包括一些基础的知识,不同的是C++中出现了构造函数和析构函数,不论是构造函数还是析构函数,从字面意义上来理解都是函数,所以不要被它吓到哦O(∩_∩)O~!

(一)概念:

  构造函数:与类名相同的,在建立对象时自动调用的函数。如果在定义时,没有为类定义构造函数,编译系统就会生成一个默认形式的隐含的构造函数,这个构造函数体是空的,因此默认构造函数不具备任何功能。

  析构函数:析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

  不论是构造函数,还是析构函数,都是C++、C#语言相对于其他语言而言特殊的地方,它是为了方便类中对象的初始化。


(二)实例解析

 下面通过一个简单的例子来解释构造、析构函数是如何使用的:


    在main主函数中,首先定义了变量p1和指针p2,变量p1就会调用myclass()构造函数,而p2是一个指针变量,不会调用构造函数(调用构造函数的各种情况,后便将会提到),按照myclass()构造函数定义会输出"A"字符,至此,完成了图例中表示的第1步;

    第2步,定义的是一个字符类变量,所以会调用myclass(char c)函数,输出“X”;

    第3步是调用析构函数~myclass(),输出“B”字符,由于前2步调用了两次构造函数,所以在这里也会调用两次析构函数,输出“BB”。综上所述,程序运行后的输出结果是“AXBB”,如下图:



(三)调用构造函数的条件

      类在创建对象时会为对象数据成员动态分配内存,此时会调用构造函数,这里值得一提的是创建的对象中指针变量是一个个例,它不会调用构造函数;而数组对象则会根据数组中元素的个数去完成相应数量构造函数的调用。

以下是在定义指针变量和没有定义指针变量的情况下的实际情况:

    实例中构造函数的作用是一旦被调用就会输出数字“1”,当定义了变量a和指针变量p[2]时,结果为1;

 

    当定义了变量a、数组b[2]和指针变量p[2]时,结果为“2”;


     由以上实例运行结果可知,指针变量是不会调用构造函数的,数组变量会根据自己数组元素的个数来调用构造函数。


(四)构造函数与其他成员函数的区别

      1.构造函数的命名必须和类名完全相同,而一般成员函数则不能和类名相同;

      2.构造函数的功能主要用于在类的对象创建时定义初始化的状态,它没有返回值,也不能用void来修饰,这就保证了它不用自动返回值,如果没有返回值,则必须用void予以说明;

      3.构造函数不能直接被调用,必须在创建对象时才会由编译器自动调用,一般成员函数在程序执行到它的时候被调用;

      4.当定义一个类定义的时候,如果用户没有定义构造函数,编译器会提供一个默认的构造函数,而成员函数不存在这一特点;


(五)构造函数和析构函数的关系

      有两个函数的定义我们可以知道,构造函数和析构函数是一对同声同灭的函数,在创建对象时调用构造函数,在释放对象空间时调用析构函数,但是需要注意的是:在对象消失时的清理工作并不是由析构函数完成,而是靠用户在析构函数中添加清理语句完成。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值