码迷,mamicode.com
首页 > 其他好文 > 详细

拷贝构造函数

时间:2020-04-05 13:47:00      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:怎么   col   The   int   有一个   假设   private   out   结果   

我们先看一个普通的构造函数的使用

class Test
{
private:
    /* data */
public:
    Test(int a);
    ~Test();
    int A;
};

Test::Test(int a)
{
    A = a;
}

Test::~Test()
{
}


int main()
{
    Test test(1);
    cout<<test.A<<endl;

}

我们定义了一个类 Test 并用了类名定义了一个构造函数,用来传入成员变量A的值。

这是一个正常的构造函数的用法。

 

那么拷贝构造函数什么时候用呢?

当我想用一个对象去初始化另一个对象的时候。

Test A;
Test A(B);

就需要用到拷贝构造函数,我们看一下怎么写

class Test
{
private:
    /* data */
public:
    Test(int a);
    Test(const Test &q);
    ~Test();
    int A;
};

Test::Test(int a)
{
    A = a;
}

Test::Test(const Test &q)
{
    A = q.A + 1;
}

Test::~Test()
{
}


int main()
{
    Test test(1);
    Test test2(test);
    Test test3 = test;
    cout<<test.A<<endl;
    cout<<test2.A<<endl;
    cout<<test3.A<<endl;
}

输出结果

1
2
2

代码中标红的部分,就是拷贝构造函数,和他的调用方法。为了区分 用拷贝构造函数赋值的对象,所以我给 A 加了 1 .

 

 

假设现在我有一个普通函数调用了刚创建的类,我们看一下运行结果

class Test
{
private:
    /* data */
public:
    Test(int a);
    Test(class Test &q);
    ~Test();
    int A;
};

Test::Test(int a)
{
    A = a;
}

Test::Test(class Test &q)
{
    A = q.A + 1;
}

Test::~Test()
{
}

void get(Test p)
{
    cout<<"the A int get() is : "<<p.A<<endl;
}


int main()
{
    Test test(1);
    Test test2(test);
    Test test3 = test;
    cout<<test.A<<endl;
    cout<<test2.A<<endl;
    cout<<test3.A<<endl;
    get(test2);
}

运行结果:

1
2
2
the A int get() is : 3

证明我们在调用 get函数,传参的时候  Test p 又重新调用了一次拷贝构造函数,所以输出的值是3

 

拷贝构造函数

标签:怎么   col   The   int   有一个   假设   private   out   结果   

原文地址:https://www.cnblogs.com/qifeng1024/p/12636716.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!