C++对象的复制操作

Posted LC编程开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++对象的复制操作相关的知识,希望对你有一定的参考价值。

对象的复制操作

       定义一个C++类对象的时候,就是调用类的构造函数,创建一个对象。假设有如下的student类:

class student{

public: //定义成员变量

    char name[32]; //姓名

    char addr[32]; //家庭地址

    long long number; //电话号码

public: //以下部分是公有部分

    student(char* pn, char* pa, long long n)

    {

        strcpy(name, pn);

        strcpy(addr, pa);

        number = n;

    }

    void print() const

    {

        cout << "name = " << name << endl;

        cout << "addr = " << addr << endl;

        cout << "number = " << number << endl;

    }

};

       那么,可以定义一个对象,如下:

student stud("wkf", "www.mylinux.vip", 13926572996);

       此时,定义了stud对象。那么,能否使用stud对象来创建一个新的类对象?例如:

student stud1(stud);

       就是使用stud对象来创建stud1对象。这种方法是允许的,这就是我们本节介绍的:对象复制。

C++提供了这样的克隆机制,就是“对象的复制机制”。用一个已有的对象快速地复制出多个完全相同的对象,其一般格式为:

类名  对象2(对象1);

就是在定义对象2的时候,用对象1复制出对象2。

       要实现这个操作,我们需要给C++类定义一个特殊的构造函数,称为:拷贝构造函数(copy constructor),这个函数的形式如下:

构造函数名(需要拷贝对象的引用)

       假设有一个student类,那么,定义其拷贝构造函数如下:

student(const student& s)

       此时,定义一个student类的拷贝构造函数,拷贝构造函数的参数是需要拷贝对象的引用。那么,为了保护引用对象的数据,我们一般声明为const类型的引用。

       拷贝构造函数也是构造函数,但是,它只有一个参数,这个参数是本类的对象(不能是其他类的对象),而且,参数对象的引用形式(一般约定加 const 声明,使参数值不能改变,以免在调用此函数时因不慎而使对象值被修改),此拷贝构造函数的作用就是将实参对象的各个成员变量的值一一赋给新的对象中对应的成员变量。

       注意:定义一个C++类的时候,如果用户没有自己定义拷贝构造函数,那么,编译系统为C++提供了一个默认的拷贝构造函数,这个默认的拷贝构造函数很简单,如同默认的赋值运算一样,只是把对象之间的成员变量进行一一对应赋值。如下是一个程序测试例子:

程序运行结果如下:

       可以看的,我们定义了一个stud对象,然后,执行:

student stud1(stud);

       此时,定义一个stud1对象,就是使用stud对象来复制,复制得到stud1对象。在上面的例子中,我们没有定义拷贝构造函数,那么,就使用系统默认提供的拷贝构造函数,实现对象成员的一一对应赋值。

韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip

 

 

 

 

 

 

 

 

 

 

 

以上是关于C++对象的复制操作的主要内容,如果未能解决你的问题,请参考以下文章

稍微深入点理解C++复制控制转

如何在 C++ 中将一个对象从一个向量复制到另一个向量?

C++ String的引用计数写时复制 的实现 《More Effective C++》

C++ String的引用计数写时复制 的实现 《More Effective C++》

c++ 创建型模式-原型模式(Prototype)

为啥 C++ 复制构造函数必须使用 const 对象?