拷贝构造函数(深浅拷贝)_skybeauty_新浪博客

本文通过一个具体的C++学生类实例,深入探讨了深拷贝与浅拷贝的区别及其实现方式。文章展示了如何通过自定义拷贝构造函数来实现深拷贝,确保对象间的独立性。

注意:

拷贝构造函数里面可以传递其他参数,但是参数必须有初始值,拷贝构造函数的参数是类对象的别名 





#include <iostream>

using namespace std;


//class stu

//{

//private:

//    int id;

//    static int n;

//public:

//    static void d()

//    {

//        cout<<"abc"<<"\n";

//    }

//  static void get()

//    {

//        cout<<"stu"<<"\n"<<"n="<<n<<"\n";

//        d();

//    }

//    void add()

//    {

//       static int a=1;

//        a++;

//        cout<<"a="<<a<<"\n";

//    }

//};

//int  stu ::n;

class student

{

private:

   int size;

   string *name;

public:

    student()

    {

       size = 1;

       name = NULL;

    }

    student(int a,string *s)

    {

       size = a;

       name = new string[a];

       for(int i = 0;i < a;i ++)

        {

           name[i] = s[i];

        }

    }

   void set(string &s,int i)

    {

       name[i]=s;

    }

   void get()

    {

       for(int i=0;i<size;i++)

        {

           cout<<name[i]<<"\n";

        }

       cout<<"size="<<size<<"\n";

    }

    //注意这里自己重新写一个拷贝构造函数,当改变原来类的一个对象里的数据成员的时候,本对象里的数据成员不被改变,如果不写此拷贝构造函数则系统自动调用拷贝构造函数,这时候本对象的成员数据会随着原来类的对象的数据的改变而改变……

    student(student &d)拷贝构造函数

    {

       name=new string[d.size];

       for(int i=0;i<d.size;i++)     这里是深拷贝。系统默认的是浅拷贝

        {

           name[i]=d.name[i];

        }

       size=d.size;

    }

};


int main(int argc, const char * argv[])

{


    // insert code here...

   string s[3];

   for(int i=0;i<3;i++)

    {

       cin>>s[i];

        

    }

   student m(3,s);

    m.get();

    

    

   student s3(m);


   string n;

   string &t=n;

   cin>>n;

    m.set(t, 1);

        s3.get();

    m.get();

//    stu s;

//    s.add();

//    

//   

//    s.add();

   

    

    std::cout << "Hello, World!\n";

   return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值