C++类的构造函数、析构函数与拷贝构造函数

先简单创建一个类,下面的一些讲解以及操作都会在这个类中实现:

#include<iostream>
using namespace std;

class test
{
public:
	
private:
	int m_data;
};

int main()
{
	test t;

}

构造函数

对于test类,可以通过公有的方法给对象设置内容,但是如果每次创建对象都调用该方法设置信息,未免有点麻烦,那能否在对象创建时,就将信息设置进去呢?我们可以利用构造函数来实现。
构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。

构造函数的特点:

  1. 无返回值
  2. 函数名与类名相同
  3. 不需手动调用,实例化对象后会自动调用
  4. 构造函数可以重载
  5. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成。
  6. 无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认成员函数。

下面给出构造函数代码:

#include<iostream>
using namespace std;

class test
{
public:
	test()
	{
		cout << "This is test" << endl;
	}

	test(int data)
	{
		m_data = data;
	}
private:
	int m_data;
};

int main()
{
	test t; // 调用无参构造函数
	test t1(100); // 调用带参的构造函数
}

析构函数

析构函数:与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作。

析构函数的特点:

  1. 析构函数名是在类名前加上字符 ~。
  2. 无参数无返回值。
  3. 一个类有且只有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。
  4. 对象生命周期结束时,C++编译系统系统自动调用析构函数。

拷贝构造函数

拷贝构造函数:用已存在类类型对象创建新对象时由编译器自动调用,只有单个类类型引的型参,且一般用const修饰。

对象初始化对象时会调用拷贝构造函数:

  1. 当函数的参数是以对象的值形式传递,在调用函数时,会调用拷贝构造函数。
  2. 当函数是以对象的值形式返回,在返回时会调用拷贝构造函数。
	class test
{
public:
	test()
	{
		cout << "This is test" << endl;
	}

	test(int data)
	{
		m_data = data;
	}
	 //拷贝构造函数
	test(const test &t)
	{
		m_data=t.m_data;
	} 
	int GetData()const
	{
		return m_data;
	}
private:
	int m_data;
};

    test fun(test t)//函数的参数是以对象的值形式传递
{
	int value=t.GetData();
	test tmp(value);
	return tmp;//函数是以对象的值形式返回
}

拷贝构造函数的特点:

  1. 拷贝构造函数是构造函数的一个重载形式。
  2. 拷贝构造函数的参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用。
  3. 若未显示定义,系统生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝我们叫做浅拷贝,或者值拷贝。
  • 3
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页

打赏

小柒七七七

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值