拷贝构造函数

   
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class CA
{
public:
 CA();
 ~CA();
 CA(const CA&);
 void Init(int a,char* chvar)
 {
  x = a;
  memcpy(ch,chvar,10*sizeof(char));
 }

 void show()
 {
  cout<<x<<" "<<ch;
 }
 void Del()
 {
  delete ch;
 }
protected:

private:
 int x;
 char* ch;
};

CA::CA()
{
 ch = new char[10];
 // cout<<"这里是构造函数 "<<x<<" "<<ch<<endl;
}

CA::~CA()
{
 /*cout<<"这里是析构函数"<<endl;*/
}

//拷贝构造函数

CA::CA(const CA& cb)
{
 x = cb.x;
 ch = new char[10];//独立分配内存
 memcpy(ch,cb.ch,10*sizeof(char));//传值
}

int _tmain(int argc, _TCHAR* argv[])
{
 CA a;
 a.Init(1,"1211hjh3");
 //b = a;
 CA b(a);

//如果写成ca a,b; a.Init(1,"1211hjh3"); b(a);就错了,因为这时候b在开始的时候已经构造了
 b.show();
 a.Del();//把a内的数据ch释放掉以后,因为b的拷贝构造函数使b内的ch是独立的,跟a无关,所以b里的ch内存不会被删除。

//如果没有拷贝构造函数的话,因为类的成员里面有指针,默认拷贝以后,指针指向 的是一个地址,所以,删除了第一个的内容,第二个对象的指针值也没删除了
 cout<<endl;
 b.show();
 getchar();
 return 0;
}

参考:http://baike.baidu.com/view/1266959.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值