zoukankan      html  css  js  c++  java
  • C++拷贝构造函数剖析(copy constructor)

    首先让我们看一下,下面的代码,然后再做剖析:

      1 #include <iostream>                                                                                                                                                         
      2 #include <string>
      3 using namespace std;
      4 class person{
      5 public:
      6     person()
      7     {
      8         cout << "this is default constructor!" << endl;
      9     }
     10     person(string temp)
     11     {
     12         name = temp;
     13         cout << "this is parameter constructor!" << endl;
     14     }
     15     person(const person& temp)
     16     {
     17         this->name = temp.name;
     18         cout << "this is copy constructor!" << endl;
     19     }
     20     person& operator = (person& temp)
     21     {
     22         this->name = temp.name;
     23         cout << "this is = function " << endl;
     24         return *this;
     25     }
     26 
     27     string name;
     28 };
     29 int main()
     30 
     31     person a;
     32     person b;
     33     a = b;
     34     person c = a;
     35     person d("who");
     36 
     37     return 0;
     38 
     39 }

    运行输出的结果:

      

    因此我们可以看出:

    当我们使用已经初始化过后的对象a,b,让 a = b,实质上调用的是运算符重载。

    当我们使用 person c = a;的时候,实质上调用的是copy construcotr(拷贝构造函数),也就是说这句话相当于 person c(a);

    person c(a) 相当于 person c.person(a);即调用copy constructor

    当a的值传递给copy constructor (person(const person& temp))的时候,如果没有加引用,即(person(person temp)),

    那就相当于 再次构造,即perosn temp = a,所以我们需要再次的调用copy constructor,所以就陷入了无限的递归之中。

     用图表示为(将就着看一下吧):

       

    而至于const的原因:

      其一:在函数体内能够不改变传递进来的数值。

      其二:如果我们传递的是person a("zhangfei"),同时没有 person(string temp) 的存在,这时通过copy constructor也是可以赋值的。

  • 相关阅读:
    SOJ4478 Easy Problem II(模拟、栈)
    SOJ4480 Easy Problem IV (并查集)
    暴力枚举法总结
    区间DP学习总结
    51nod 1019 逆序数(逆序数+离散化)
    win7系统查看硬盘序列号步骤
    雷达图制作方法
    matlab更改打开时候默认路径
    excel多组数据散点图生成
    EndNote(三)之中文引文导入方式
  • 原文地址:https://www.cnblogs.com/jianmoxiansheng-Guo/p/12892967.html
Copyright © 2011-2022 走看看