您的位置:首页 > 其它

什么是复制构造函数

2016-03-14 13:58 197 查看
复制构造函数又称为拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。它存在唯一一个参数是不可变的。这个函数经常在函数调用期间于用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。一般它使用常量方式调用,另外,它也可以用非常量方式调用。

在c++中,有3中对象需要复制的情况。这时,复制构造函数将会被调用,具体如下。

一个对象以值传递的方式传入函数体。

一个对象以值传递的方式从函数返回。

一个对象需要通过另外一个对象进行初始化。如果在前两种情况下不使用复制构造函数的时候,就会导致一个指针指向已经被删除的内存空间。

对于这3种情况来说,初始化和复制的不同含义是构造函数调用的原因。事实上,复制构造函数是由普通构造函数和赋值操作符共同实现的。复制构造函数的示例代码如下:

#include <iostream>

using namespace std;

class A

{

public:

    A(int ix, int iy)

    {

        x = ix;

        y = iy;

        cout << "构造函数调用" << endl;

    }

    A()

    {

        cout << "无参构造函数调用" << endl;

    }

    A(A& a)

    {

        x = a.x;

        y = a.y;

        cout << "复制构造函数调用" << endl;

    }

protected:

private:

    int x;

    int y;

};

int main()

{

    A a(2, 3);

    A b(4, 5);

    a = b;

    A c = b;//调用复制构造函数

    cout << "b地址=" << &b << endl;

    cout << "c地址=" << &c << endl;

    A aa;

    aa = A(3, 4);

    A a2 = A(a);//调用复制构造函数

    system("pause");

    return 0;

}

有3种情况会使用复制构造函数:

一个对象以值传递的方式传入函数体。

一个对象以值传递的方式从函数返回。

一个对象需要通过另外一个对象进行初始化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: