C++类的拷贝(复制)构造函数深入理解

目录

一、拷贝构造函数的基本了解和使用

二、拷贝构造函数的一些注意事项

三、 拷贝构造函数的调用时机

①使用一个对象 “直接构造(显式构造 )” 或 “初始化(隐式构造 )”另一个同类对象

关于拷贝构造函数与赋值函数的区别与联系

②作为函数的形式参数时

 ③作为函数的返回值

 四、深拷贝与浅拷贝的区别与联系

五、总结:拷贝构造函数的难点主要是:


一、拷贝构造函数的基本了解和使用

①拷贝构造函数又被称为复制构造函数,是一种特殊的构造函数,它被/编辑器/在一个对象初始化另一个对象时调用。

②拷贝构造函数的形参列表上需要加上const来防止被引用的对象的值发生改变,不加也可以,但是不加const,会使代码显得不规范。

代码示例:

class Test{
 public:
 /*const 为了防止引用对象被修改
 也可以不写const,而是直接写 Test(Test &obj){}
 但是写const更加规范一些*/
 Test(const Test&obj)//拷贝构造函数无返回值,参数为本类对象的引用。
 {
     //函数体里面一般只写赋值语句。
 }   
}

二、拷贝构造函数的一些注意事项

①拷贝构造可以形成重载,但必须第一个形参为当前类的对象的引用(不建议对其
函数进行加参数重载)。

②如果类设计者没有显式写出拷贝构造函数,编辑器会给出一个默认拷贝构造函数,但是这个默认拷贝构造函数只能够进行浅拷贝的操作,如果类设计者需要进行深拷贝的操作,那么需要自行设计。

三、 拷贝构造函数的调用时机

①使用一个对象 “直接构造(显式构造 )” 或 “初始化(隐式构造 )”另一个同类对象

#include<iostream>

using namespace std;

class test
{
public:
    test() {
        cout << "调用默认构造函数" << " "<<this<<endl;/*利用this指针更清晰的观察编辑器创建对象和析构的具体过程*/
    }
    test(const test& obj)//写const标准一些
    {
        cout << "调用了拷贝构造函数" << " "<<this<<endl;/*一般里面只写赋值语句,但是初学者可以在拷贝构造函数体里面写这条语句以便观察什么时候调用了拷贝构造函数。*/
    }
    ~test() {
        cout << "调用了析构函数" << " "<<this<<endl;
    }
};
int main()
{
    //直接定义obj_1对象,会调用构造函数test()
    test obj_1;
    //用obj_1对象显式构造(直接构造)obj_2对象,会调用拷贝构造函数test(const test& obj)
    test obj_2(obj_1);
    //用obj_1对象隐式构造(初始化)obj_3对象,会调用拷贝构造函数test(const test& obj)
    test obj_3 = obj_1;
    //这里涉及到拷贝构造函数与赋值函数的知识点 
    return 0;
}
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值