【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

2024-04-23 1545阅读

【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

🔥个人主页:Forcible Bug Maker

🔥专栏:C++

目录

前言

拷贝构造函数

概念

拷贝构造函数的特性及用法

赋值运算符重载

运算符重载

赋值运算符重载

结语


前言

本篇主要内容:类的6个默认成员函数中的拷贝构造函数和赋值运算符重载

在上篇文章中我们讲到了类的默认成员函数的构造函数和析构函数,这两个默认成员函数在对象的生命周期中起着至关重要的作用。而今天我们要讲的拷贝构造函数和赋值运算符重载,作为类默认成员函数的其中之二,则是在对象间的初始化和拷贝当中起着重要作用。再次强六个默认成员函数的共性,这些函数会在你不提供的情况下由编译器自动生成。接下来开始我们今天的内容。

【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

拷贝构造函数

概念

在创建对象时,你可能需要创建一个与已经存在的对象一模一样的新对象。

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

拷贝构造函数的特性及用法

拷贝构造函数是一种特殊的构造函数,用于创建一个新对象作为现有对象的副本。

1. 拷贝构造函数是构造函数的一个重载形式。

2. 拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器报错,因为会引发无穷调用。

拿一个Date类来举例:

class Date
{
public:
	Date(int year = 1900, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	// Date(const Date& d) // 正确写法
	Date(const Date& d) // 错误写法:编译报错,会引发无穷递归
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d1;
	Date d2(d1);
	return 0;
}

在 Date d2(d1); 这句,将调用拷贝构造函数,其中d1通过传引用传参传递给函数中的d,d2以this指针的形式隐式传递。在运行完拷贝构造函数之后,d2创建好就是和d1相同的一个对象了。接下来详细讲解为什么构造中不加应用会导致无穷调用。

【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

void Fun1(Date d)
{
	cout 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]