构造函数的分类、调用以及调用规则

本文介绍了C++构造函数的两类分类:按参数和类型,并详细阐述了无参构造、有参构造、拷贝构造及其应用场景。接着讲解了构造函数的三种调用方式:括号法、显示法和隐式转换法,同时提醒了构造函数调用中的注意事项。最后,概述了C++中构造函数的默认生成规则和调用顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

两种分类方式:

三种调用方式:

构造函数调用规则


两种分类方式:

1.按照参数分类:无参构造(默认类型)、有参构造

2.按照类型分类:普通构造、拷贝构造

拷贝构造的参数格式:const class& classs

拷贝构造函数的三种使用场景:

1.使用一个已经创建好的对象来初始化新对象

2.值传递给函数参数传参

3.以值方式返回局部对象

#include <iostream>
using namespace std;

class persion
{
private:
	int m_age;
public:

	//无参构造
	persion()
	{
		cout << "无参函数的调用" << endl;
	}
	//有参构造
	persion(int age)
	{
		m_age = age;
		cout << "有参函数的调用" << endl;
	}
	//以上两种都属于普通构造
	//拷贝构造:将一个同类型的类数据拷贝至该变量
	persion(const persion& persionn)   //拷贝的同时要按照引用的方式传递进来
	{
		cout << "构造拷贝函数" << endl;
		m_age = persionn.m_age;
	}

	int get_persion()
	{
		return m_age;
	}

	~persion()
	{
		cout << "析构函数被调用" << endl;
	}
};

三种调用方式:

1.括号法

在实例化对象的时候,顺带着调用构造函数了

调用无参构造函数时,无需加括号,否则会被编译为函数声明!!!

2.显示法

匿名对象在当前行被创建,在当前行执行完以后,立马释放该匿名对象

有弹幕说:匿名对象可以做函数参数使用,按照引用方式传参时,要加const

不要利用拷贝构造函数初始化匿名对象!!!,否则报错重复定义

3.隐式转换法

与显示法类似,只是把persion给省略了

int main()
{
	persion persion_test(2);

	//1.括号法

	persion persion0;      //无参调用时无需加括号

	persion persion1(1);   //记得将构造函数的属性设置为公有属性

	cout << "persion1的年龄->" << persion1.get_persion() << endl;

	persion persion2(persion_test);

	cout << "persion2的年龄->" << persion2.get_persion() << endl;

	//2.显示法

	persion persion3;

	persion persion4 = persion(4);

	cout << "persion4的年龄->" << persion4.get_persion() << endl;

	persion persion5 = persion(persion_test);

	cout << "persion5的年龄->" << persion5.get_persion() << endl;

	persion(10); //匿名对象

	//3.隐式转换法

	persion persion7 = 7;

	cout << "persion7的年龄->" << persion7.get_persion() << endl;

	persion persion8 = persion_test;

	cout << "persion8的年龄->" << persion8.get_persion() << endl;

	system("pause");

	return 0;
}

构造函数调用规则

默认情况下,C++编译器至少给一个类添加3个函数:

1.默认构造函数(无参,函数体为空)

2.默认析构函数(无参,函数体为空)

3.默认拷贝构造函数,对属性进行值拷贝

构造函数调用规则如下:

1.如果用户定义有参构造函数,C++不再提供默认无参构造,但是会提供默认拷贝构造函数

2.如果用户定义默认拷贝构造函数,C++不再提供其他构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hskwcy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值