c++之构造函数和析构函数

什么是构造函数和析构函数

构造函数和析构函数是类中的一个重要属性,它的存在是为了做类的初始化等工作,可以把我们买的电子产品想作一个类,那么构造函数就是用来第一次开机去做一些系统配置的作用,之后就再也不用配置了,析构函数像是恢复默认出厂设置的作用。
在实例化一个对象的时候,constructor会自动执行,当这个对象结束生命周期后,会自动执行destructor,假如程序员没有进行这俩个函数的编写,编译器会默认生成这俩个函数的空实现,当程序员进行编写后,则会执行自定义的函数,代码和结果如下图:
请添加图片描述上节学习基础的类与对象时提了一嘴重载,重载是c++中的一个重要特性,具体是同一个函数名,不同的参数类型、不同的参数个数,不同的参数顺序都会认为他是一个新函数,具体有什么作用在后面的学习再展开,说这个概念是为了介绍下面构造函数的重载。

普通构造函数和拷贝构造函数

总览:

#include <iostream>
using namespace std;

class Code
{
public:
	Code()
	{
		cout << "已执行构造函数" << endl;
	}
	Code(int var)
	{
		cout << "已执行int参的构造函数" << endl;
	}
	Code(double var)
	{
		cout << "已执行double参的构造函数" << endl;
	}
	Code(int var, double var1)
	{
		cout << "已执行双参的构造函数" << endl;
	}
	Code(const Code &code)
	{
		cout << "已执行拷贝构造函数" << endl;
	}
	~Code()
	{
		cout << "已执行析构函数" << endl;
	}
private:
};
int main(void)
{
	Code code;
	Code code1(10);
	Code code2(1.2);
	Code code3(1, 5.5);
	Code code4(code3);
}

执行结果:
请添加图片描述
在上面的代码中我分别写了5个构造函数,它们正是利用了重载这一特性,例如当你想让它执行double参的构造函数时,在实例化类的时候就用第37行的代码。

拷贝构造函数

重点说一下什么是拷贝构造函数
首先如果你要写一个自定义的构造函数,那前提必须要把默认的构造函数写上,否则如下图:请添加图片描述
拷贝构造函数的定义方式如上代码11行,用引用的方式访问这个对象的本身并且不能对这个对象更改,这里应该很好理解,像c中的strcpy那样的函数src总是const的,防止程序员中途进行修改,这里同理。
接下来看看拷贝构造函数有什么神奇之处
请添加图片描述
如图,30行的c对象调用了参数为字符串的构造函数,关键在于第31行,此时c1.fav_code居然也变成了cplusplus,这就是拷贝构造的作用,将c对象的值拷贝给了c1。
再看一种神奇的拷贝构造函数的应用:
请添加图片描述此时发现当执行26行时打印了<已执行拷贝构造函数>,这是为什么呢?回忆一下函数的形参是不是实参的一个拷贝?这么说你就明白了,其实就是test()的形参就是拷贝了b1的副本嘛,当然要执行拷贝函数了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值