要点:
1. 判断传入参数和this是否是同一个
2. operator的参数设为常量引用,否则从形参到实参会调用赋值构造函数
3. 释放自己已有内存
4. 返回值为引用,才可以允许连续赋值
赋值运算符重载返回本类引用,形参是const引用
5. 要用strcpy,vs13用strcpy_s(m_pData, strlen(str.m_pData) + 1, str.m_Pdata)
1 class CMyString 2 { 3 public: 4 CMyString(char* pData = NULL); 5 CMyString(const CMyString& str); 6 ~CMyString(void); 7 8 CMyString& operator = (const CMyString& str); 9 10 void Print(); 11 12 private: 13 char* m_pData; 14 }; 15 16 CMyString& CMyString::operator = (const CMyString& str) 17 { 18 if(this == &str) 19 return *this; 20 21 delete []m_pData; 22 m_pData = NULL; 23 24 m_pData = new char[strlen(str.m_pData) + 1]; 25 strcpy(m_pData, str.m_pData); 26 27 return *this; 28 }
完整代码:
1 // AssignmentOperator.cpp : Defines the entry point for the console application. 2 // 3 4 // 《剑指Offer——名企面试官精讲典型编程题》代码 5 // 著作权所有者:何海涛 6 7 #include "stdafx.h" 8 #include <string> 9 10 class CMyString 11 { 12 public: 13 CMyString(char* pData = NULL); 14 CMyString(const CMyString& str); 15 ~CMyString(void); 16 17 CMyString& operator = (const CMyString& str); 18 19 void Print(); 20 21 private: 22 char* m_pData; 23 }; 24 25 CMyString::CMyString(char *pData) 26 { 27 if(pData == NULL) 28 { 29 m_pData = new char[1]; 30 m_pData[0] = '