歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++之拷貝構造函數

C++之拷貝構造函數

#include <iostream></p>#include <string>
using namespace std;

class name
{
public :
 name();//默認構造函數
 name(char *pn);  //構造函數
  name(const name &obj);//拷貝構造函數
 ~ name() ;//析構函數
protected :
 char *pname ; 
 int size ;
public:
 name& operator=(name &obj);//"="運算符重載
} ;

name::name()
{
 cout<<"Constructing"<<endl;
 pname=NULL;
 size=0;
}
name::name(char *pn)
{
 cout <<"Constructing "<< pn << endl;
  pname = new char[strlen(pn)+1];
  if (pname)
 strcpy(pname,pn);
 size = strlen(pn);
}

name::name(const name &obj)
{
 cout <<"copy Constructing "<<obj.pname<<endl;
 pname = new char[strlen(obj.pname)+1];
 if (pname)
 strcpy(pname,obj.pname);
 size = strlen(obj.pname);
}

name& name::operator=(name &obj)
{
 cout <<"Assigning "<<obj.pname<<endl;
 if (this==&obj)//this指針用於表示當前對象的地址
 {
  return obj;
 }
 if(pname)
 {
  delete []pname;
  size=0;
 }
 
 pname = new char[strlen(obj.pname)+1];
 if (pname)
 {
  strcpy(pname,obj.pname);
  size=strlen(obj.pname);
 }
 return *this;
}

name :: ~ name()
{
 cout << "Destructing "<< pname << endl;
 delete  []pname;
 size = 0;
}


void playmain()
{
 name obj1("zhangsan");
 //如果你不寫copy構造函數,那麼C++編譯器會給我們提供一個默認的copy構造函數(淺copy)
 name obj2 = obj1;
 name obj3("lisi");
 name obj4;
 //如果你不寫=操作函數,那麼C++編譯器會給我們提供一個=操作函數(淺copy)
 obj4=obj3;
}

void main()
{
 playmain();
 system("pause");
}

在C++中,下面三種對象需要調用拷貝構造函數(有時也稱“復制構造函數”):
1) 一個對象作為函數參數,以值傳遞的方式傳入函數體;
2) 一個對象作為函數返回值,以值傳遞的方式從函數返回;
3) 一個對象用於給另外一個對象進行初始化(常稱為賦值初始化);

------------------------------分割線------------------------------

C++ Primer Plus 第6版 中文版 清晰有書簽PDF+源代碼 http://www.linuxidc.com/Linux/2014-05/101227.htm

讀C++ Primer 之構造函數陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm

讀C++ Primer 之智能指針 http://www.linuxidc.com/Linux/2011-08/40177.htm

讀C++ Primer 之句柄類 http://www.linuxidc.com/Linux/2011-08/40175.htm

將C語言梳理一下,分布在以下10個章節中:

  1. Linux-C成長之路(一):Linux下C編程概要 http://www.linuxidc.com/Linux/2014-05/101242.htm
  2. Linux-C成長之路(二):基本數據類型 http://www.linuxidc.com/Linux/2014-05/101242p2.htm
  3. Linux-C成長之路(三):基本IO函數操作 http://www.linuxidc.com/Linux/2014-05/101242p3.htm
  4. Linux-C成長之路(四):運算符 http://www.linuxidc.com/Linux/2014-05/101242p4.htm
  5. Linux-C成長之路(五):控制流 http://www.linuxidc.com/Linux/2014-05/101242p5.htm
  6. Linux-C成長之路(六):函數要義 http://www.linuxidc.com/Linux/2014-05/101242p6.htm
  7. Linux-C成長之路(七):數組與指針 http://www.linuxidc.com/Linux/2014-05/101242p7.htm
  8. Linux-C成長之路(八):存儲類,動態內存 http://www.linuxidc.com/Linux/2014-05/101242p8.htm
  9. Linux-C成長之路(九):復合數據類型 http://www.linuxidc.com/Linux/2014-05/101242p9.htm
  10. Linux-C成長之路(十):其他高級議題

Copyright © Linux教程網 All Rights Reserved