既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
using namespace std;
class ClassA
{
public:
// 普通构造函数
ClassA(int i, int j)
{
m_nValue1 = i;
m_nValue2 = j;
}
// 自定义的拷贝构造函数
ClassA(const ClassA& obj)
{
m_nValue1 = obj.m_nValue1 * 2;
m_nValue2 = obj.m_nValue2 * 2;
}
// 打印成员变量的值
void ShowValue()
{
cout << "m_nValue1 is: " << m_nValue1 << ", m_nValue2 is: " << m_nValue2 << endl;
}
private:
int m_nValue1;
int m_nValue2;
};
int main()
{
// 创建并初始化对象obj1,此处调用了普通构造函数
ClassA obj1(1, 2);
// 创建并初始化对象obj2,此处调用了自定义的拷贝构造函数
ClassA obj2(obj1);
obj1.ShowValue();
obj2.ShowValue();
return 0;
}
编译并执行上述代码,结果如下:

上述执行结果表明,通过调用自定义的拷贝构造函数,在创建对象 obj2 时,根据对象 obj1 的成员变量的值,完成了自定义的初始化过程。
### 1.4 调用形式上的区别
可以从调用内容上,对“对象的赋值”和“对象的复制”进行区分。两者的调用内容的对应关系如下:
* **对象的赋值:**指的是调用了类的赋值运算符,进行的对象的拷贝操作;
* **对象的复制:**指的是调用了类的拷贝构造函数,进行的对象的拷贝操作。
上面的对应关系是不严谨的,因为有些情况下,即使使用了赋值运算符“=”,但其实最终使用的仍然是类的拷贝构造函数,这就引出了拷贝构造函数的两种调用形式。
拷贝构造函数的调用语法分为以下两种:
* 类名 对象2(对象1)。例如:“ClassA obj2(obj1);”,这种调用拷贝构造函数的方法称为“代入法”;
* 类名 对象2 = 对象1。例如:“ClassA obj2 = obj1;”,这种调用拷贝构造函数的方法称为“赋值法”。
拷贝构造函数的“赋值法”就很容易与“对象的赋值”场景混淆,二者之间的区别是:**对象的赋值场景必须是建立在源对象与目标对象均已声明的基础上;而拷贝构造函数函数的赋值法,必须是针对新创建对象的场景。**
下面给出简单的示例代码说明两者的区别。
【对象的赋值】:
// 声明对象obj1和obj2
ClassA obj1;
ClassA obj2;
obj1.SetValue(1, 2);
// 对象赋值场景 —— 将obj1的值赋给obj2
obj2 = obj1;
【拷贝构造函数的“赋值法”】:
// 创建并初始化对象obj1,此处调用了普通构造函数
ClassA obj1(1, 2);
// 创建并初始化对象obj2,此处调用了自定义的拷贝构造函数
ClassA obj2 = obj1;
当然,为了代码含义的清晰化及代码的可读性,建议使用拷贝构造函数的“代入法”,更可以让人一眼就看出调用的是拷贝构造函数。
### 1.5 调用拷贝构造函数的三个场景
#### 1.5.1 类对象初始化
当使用类的一个对象去初始化另一个对象时,会调用拷贝构造函数(包括“代入法”和“赋值法”)。示例代码内容如下:
// 创建并初始化对象obj1,此处调用了普通构造函数
ClassA obj1(1, 2);
// 创建并初始化对象obj2,此处调用了自定义的拷贝构造函数
ClassA obj2(obj1); // 代入法
ClassA obj3 = obj1; // 赋值法
#### 1.5.2 类对象作为函数参数
当类对象作为函数形参时,在调用函数进行形参和实参转换时,会调用拷贝构造函数。
示例代码内容如下:
// 形参是类ClassA的对象obj
void funA(ClassA obj)
{
obj.ShowValue();
}
int main()
{
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
95%以上C C++开发知识点,真正体系化!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新