各位好友,欢迎来到本期博客 !经过前几期的学习, 类 ~ 对象 ,正变得越来越有滋味 ! 如今,六大默认成员函数 ---还剩下两个重要的函数 --- 拷贝复制 与 赋值重载 下面,开战 拷贝
各位好友,欢迎来到本期博客 !经过前几期的学习, 类 ~ 对象 ,正变得越来越有滋味 ! 如今,六大默认成员函数 --->还剩下两个重要的函数 --->拷贝复制 与 赋值重载
下面,开战 拷贝复制 !
----->拷贝构造函数:只有单个形参,该形参是对本类 类型对象的引用(常用 const 修饰)
意即,用 已经存在的类 -->类型对象创建对象时,由编译器自动调用 !
其实,前几次讲解 默认构造函数,最重要的还是其特性 !下面。来看看拷贝构造函数的特性 !
---->特性 :>
1. 拷贝构造函数是构造函数的一个重要的重载形式;
2. 拷贝构造函数的参数 有且只有一个 且必须是类 -->类型对象的引用,使用传值方式 编译器直接报错,因为会引发无穷递归调用 ;
3. 如果未显示定义,编译器会自动生成默认拷贝构造函数。默认拷贝构造函数对象 按照内存存储 以字节序完成拷贝
又称 -->浅拷贝,或者 值拷贝。
----->实现环节 --->初步探究:>
#include <iostream>
using std::cout;
using std::endl;
class Date
{
public:
Date(int year = 2018, int month = 06, int day = 07)
{
_year = year;
_month = month;
_day = day;
}
void Print()
{
cout << _year << " - " << _month << " - " << _day << " - " << endl;
}
//拷贝构造函数
Date(const Date& d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1;
d1.Print(); // 显然此处, Date 类 并没有显示定义,则编译器会生成默认构造函数 --->特性 3
Date d2(d1);
d2.Print(); // 此处是 拷贝构造函数的运用 与打印
Date d3(2023, 05, 07);
d3.Print(); // 该处 已经显示定义, 则编译器不会再生成默认构造函数
Date d5(d3);
d5,Print();
return 0;
}
为了方便好友们,有更好的观感体验,与更好的理解 !现附上有彩色的代码图样 :>
现 对上述部分 较为难以理解的点,进行讲解 !
----->以下是 正确用法:>
----->以下是 错误用法 :>
为了便于好友们,更加理解 与 掌握 上述代码 !以下采用递归展开图 -->进行讲解 :>
各位好友,上述话语中,已经有答案了 !