請為CMyString型別編寫建構函式、copy建構函式、解構函式和賦值運算子函式。
阿新 • • 發佈:2018-11-26
如下為型別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 }