C++之构造函数

本文详细介绍了构造函数的不同类型及其使用场景,包括无参数构造函数、一般构造函数、复制构造函数、类型转换构造函数等,并通过一个具体的类实现了这些构造函数。

构造函数的作用是初始化对象的数据成员。

1)  无参数构造函数

如果创建一个类你没有写任何构造函数,则系统会自动生成默认的无参构造函数,函数为空,什么都不做。只要你写了某一种构造函数,系统就不会再自动生成这样一个默认的构造函数,如果希望有一个这样的无参构造函数,则需要自己显式地写出来。

2)  一般构造函数

一般构造函数可以有各种参数形式,一个类可以有多个一般构造函数,形成构造函数重载,创建对象时根据传入的参数不同调用不同的构造函数。

3)  复制构造函数(拷贝构造函数)

复制构造函数为类对象本身的引用,用于根据一个已存在的对象复制出一个新的该类的对象。若没有显式的写复制构造函数,则系统会默认创建一个复制构造函数,但当类中有指针成员时,由系统默认创建该复制构造函数会存在风险,需要考虑 “浅拷贝” 、“深拷贝”的问题。

4)  类型转换构造函数

根据一个指定的类型的对象创建一个本来的对象。

5)  运算符重载

由于运算符重载与复制构造函数有点像,这里也顺便讨论一下,运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。函数名是由关键字operator和其后要重载的运算符符号构成。

下面通过一个例子说明构造函数的用法:

声明:

Test.h

class A
{
private:
	int value_1;
	int value_2;
public:
	//无参数构造函数
	A(void);
	
	//一般构造函数
	A(int i, int j); 

	//复制构造函数
	A(const A& other);

	//类型转换构造函数
	A(int a);

	//赋值运算符函数
	A &operator = (const A &str);

};
定义:

Test.cpp

#include "Test.h"

//无参数构造函数
A::A(void)
{
	
}
//一般构造函数
A::A(int i, int j)
{
	value_1 = i;
	value_2 = j;
}
//复制构造函数
A::A(const A& other)
{
	value_1 = other.value_1;
	value_2 = other.value_2;
}
//类型转换构造函数
A::A(int a)
{
	value_1 = a;
	value_2 = 5;
}
//赋值运算符函数
A& A::operator=(const A &str)
{
	if (this == &str)
	{
		return *this;
	}
	this->value_1 = str.value_1;
	this->value_2 = str.value_2;
	return *this;
}

测试:

#include "Test.h"

void main()
{
	//调用无参数构造函数
	A a1,a2;

	//调用一般构造函数
	A a3(1,2);
	A a4 = A(3,4);
	
	//调用赋值运算符函数
	a1 = a3;
	
	//先调用类型转换构造函数,再调用赋值构造函数
	a2 = 5;

	//调用拷贝构造函数
	A a5(a1);
	A a6 = a2;

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LM Wang

感恩这个世界~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值