1. 程式人生 > >請為CMyString型別編寫建構函式、copy建構函式、解構函式和賦值運算子函式。

請為CMyString型別編寫建構函式、copy建構函式、解構函式和賦值運算子函式。

如下為型別CMyString的宣告,請為該型別編寫建構函式、copy建構函式、解構函式和賦值運算子函式。
 1 class CMyString
 2 {
 3 public:
 4     CMyString(const char* pData = nullptr);
 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 };
 
 

完整程式碼如下:

 1 #include<cstring>
 2 #include<cstdio>
 3  
 4 using namespace std;
 5  
 6 class CMyString
 7 {
 8 public:
 9     CMyString(const char* pData = nullptr);
10     CMyString(const CMyString& str);
11     ~CMyString(void
); 12 13 CMyString& operator = (const CMyString& str); 14 15 void Print(); 16 17 private: 18 char* m_pData; 19 }; 20 21 CMyString::CMyString(const char *pData) 22 { 23 if (pData == nullptr) 24 { 25 m_pData = new char[1]; 26 m_pData[0] = '\0'; 27 }
28 else 29 { 30 int length = strlen(pData); 31 m_pData = new char[length + 1]; 32 strcpy_s(m_pData,length+1, pData); 33 } 34 } 35 36 CMyString::CMyString(const CMyString &str) 37 { 38 int length = strlen(str.m_pData); 39 m_pData = new char[length + 1]; 40 strcpy_s(m_pData,length+1, str.m_pData); 41 } 42 43 CMyString::~CMyString() 44 { 45 delete[] m_pData; 46 } 47 48 CMyString& CMyString::operator = (const CMyString& str) 49 { 50 if (&str != this) 51 { 52 CMyString strTemp(str); 53 char* pTemp = strTemp.m_pData; 54 strTemp.m_pData = m_pData; 55 m_pData = pTemp; 56 } 57 58 return *this; 59 } 60 61 void CMyString::Print() 62 { 63 printf("%s", m_pData); 64 }