拷贝构造函数与赋值函数 的鉴别

(1)测试一下自己,能区分么?

String a("zhangbufeng");
String b("cuixiaoyuan");
String c(a);//对象创建时,使用拷贝构造函数
c=b; //c已经被初始化,从而调用了赋值函数。上次多写了个String,造成了重定义。

 

(2) code 验证

 

 

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

class String
{
   public:
  String(const char *str = NULL);     // 普通构造函数
  String(const String &other);     // 拷贝构造函数
  ~String(void);         // 析构函数
  String & operator =(const String &other); // 赋值函数
   private:
  char   *m_String;    //私有成员,保存字符串
};
 String::~String(void)           
{
 cout<<"Destructing"<<endl;
 delete [] m_String;                     
 
}
            
 String::String(const char *str)    
{
    cout<<"Construcing"<<endl;
 if(str==NULL)                        
 {
  m_String = new char[1];  
  *m_String = '/0';                    
 }                                      
 else
 {
  int length = strlen(str);         
  m_String = new char[length+1];      
  strcpy(m_String, str);              
 }
}
String::String(const String &other)
{
 cout<<"Constructing Copy"<<endl;
 int length = strlen(other.m_String);
 m_String = new char[length+1];       
 strcpy(m_String, other.m_String);       
}
String & String::operator =(const String &other) 
{
 cout<<"Operate = Function"<<endl;


//检查自赋值                  
 if(this == &other)
   return *this;
 
   //释放原有的内存资源         
  delete [] m_String;
 
 //分配新的内存资源,并复制内容
 int length = strlen(other.m_String);
 m_String = new char[length+1];       
  strcpy(m_String, other.m_String);
 
 //返回本对象的引用          
  return *this;
}
void main()
{
  String a("zhangbufeng");
  String b("cuixiaoyuan");
  String c(a);
  c=b;
  String d=a;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

do2jiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值