JZ-C-01
劍指offer代碼實現:基本照敲,順便寫寫注釋和疑問。
第一題:為CMyString類添加賦值運算符函數,代碼如下:
1 //============================================================================ 2 // Name : JZ-C-01.cpp 3 // Author : Laughing 4 // Version : 5 // Copyright : Your copyright notice 6 // Description : Hello World in C++, Ansi-style 7 //============================================================================ 8 #include "stdafx.h" 9 #include <string.h> 10 using namespace std; 11 /** 12 *劍指offer面試題1 13 */ 14 class CMyString { 15 public: 16 CMyString(char* pData = NULL); //構造函數 17 CMyString(const CMyString &str); //類似復制構造函數? 18 ~CMyString(void); 19 void print(); //打印 20 CMyString& operator =(const CMyString &str); //賦值運算符重載:返回類型是該類型的引用,這樣才可以允許連續賦值:"str=str1=str2"。const:因為在賦值運算符函數內不會改變傳入的實例的狀態 21 private: 22 char* m_pData; 23 }; 24 CMyString::CMyString(char *pData) { 25 if (pData == NULL) { //若為空 26 m_pData = new char[1]; 27 m_pData = '\0'; //字符串默認最后一位補'\0' 28 } else { 29 int length = strlen(pData); //字符串長度 30 m_pData = new char[length + 1]; //為何+1? 31 strcpy(m_pData, pData); //復制 32 } 33 } 34 CMyString::CMyString(const CMyString &str) { 35 int length = strlen(str.m_pData); 36 m_pData = new char[length + 1]; 37 strcpy(m_pData, str.m_pData); 38 } 39 CMyString::~CMyString() { 40 delete[] m_pData; //釋放內存 41 } 42 void CMyString::print() { 43 cout << m_pData << endl; 44 } 45 CMyString& CMyString::operator =(const CMyString& str) { //自動生成,前面有inline,為什么? 46 if (this == &str) { //先判斷傳入的參數和當前實例是不是同一個實例★ 47 return *this; 48 } 49 /*若沒上面的if判斷,若為同一個實例,一旦釋放自身的內存,傳入的參數的內存同樣被釋放*/ 50 delete[] m_pData; //先釋放內存 51 m_pData = NULL; 52 m_pData = new char[strlen(str.m_pData) + 1]; //重新分配空間 53 strcpy(m_pData, str.m_pData); 54 return *this; //返回實例自身的引用 55 } 56 int main() { 57 cout << "Hello World!!!" << endl; // prints Hello World!!! 58 char* str = "Hello World"; //有什么問題,和不加 const區別 59 CMyString test(str); 60 test.print(); 61 CMyString test2, test3; 62 //test = test; //賦值給自己,此處以判斷傳入參數和當前實例相同時會不會出現問題 63 test3 = test2 = test; //利用賦值運算符為對象test2,test3賦值 64 test3.print(); 65 return 0; 66 }?
轉載于:https://www.cnblogs.com/Laughing-Lz/p/5490869.html
總結
- 上一篇: 如何重装系统
- 下一篇: 基于JAVAEE的网络电子相册管理系统的