码迷,mamicode.com
首页 > 编程语言 > 详细

【C++】复制构造函数

时间:2015-09-05 19:23:50      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

参考资料:黄邦勇帅(里面对于临时变量的说法我不是很理解,感觉里面的解释有问题)

 

用到复制构造函数的情况:

1.函数值传递

2.返回对象

3.用一个对象初始化另一个对象

 

重点注意下面两种情况:

① 只调用复制构造函数,不会生成临时变量

  A a = b;

② 会产生临时变量,会调用复制构造函数和赋值函数

  A a;

  a = b;

 

#include<iostream>
using namespace std;

class hyong
{
public:
    int a, b, c;
    hyong()
    {
        a = b = c = 0;
        cout << "construct" <<endl;
    }
    hyong(int i)
    {
        a = b = c = i;
        cout << "construct 2" <<endl;
    }
    hyong(const hyong &obj)  //复制构造函数
    {
        a = b = c = 9;
        cout << "construct copy" <<endl;
    }
    void h(hyong k) //值传递
    {
        cout << "k.a = " << k.a << " k.b = " << k.b<< endl;
    }
    hyong & hyong::operator = (const hyong & other)
    {
        cout << "=" << endl;
        if(this == &other)
            return *this;
        a = other.a;
        b = other.b;
        c = other.c;
        return *this;
    }

    ~hyong()
    {
        cout << "xigou" << endl;
    }
};

hyong f() //返回对象
{
    hyong m3(5);
    return m3;
}

int main()
{
    hyong m(1);
    hyong n = m;  //调用复制构造函数
    cout << m.a << m.b << endl;
    cout << n.a << n.b << endl;
    hyong m1 = hyong(m);  //调用复制构造函数
    cout << m1.a << m1.b << endl;
    hyong m2(m);    //调用复制构造函数
    cout << m2.a << m2.b << endl;
    hyong *p = new hyong(m);  //调用复制构造函数
    cout << p->a << p->b << endl;
    cout << "------------"<< endl;
    hyong m3;
    m3 = hyong(m); //先用复制构造函数得到了一个临时变量,然后用赋值函数将临时变量值赋给m3, 之后临时变量析构
    cout << "------------"<< endl;
    hyong m4;
    m4 = m; //直接调用赋值
    cout << "------------"<< endl;
    hyong m5 = f();    // 设f()返回的临时变量为r,其实r就是函数里的m3,
                       //m3通过复制构造函数赋给m5,之后m3析构
    cout << "------------"<< endl;
    hyong m6;          //先定义,并用默认构造函数初始化了m6
    m6 = f();          //f()返回m3, 然后用复制构造函数将m3赋给了临时变量tmp, m3析构;
                       //tmp通过赋值函数赋给m6, tmp析构
    cout << "------------"<< endl;
    hyong m7(f());     // 设f()返回m3,m3通过复制构造函数赋给m7,之后m3析构
    return 0;
}

技术分享

【C++】复制构造函数

标签:

原文地址:http://www.cnblogs.com/dplearning/p/4783626.html

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