Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / 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成长之路(十):其他高级议题
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-05/116983.htm