1 class CMyString 2 { 3 friend std::ostream& operator<<( std::ostream& os, const CMyString& str); 4 private: 5 char* m_pData; // 私有变量保存字符串 6 public: 7 CMyString( const char* str = NULL ); // 构造函数 8 CMyString( const CMyString& str ); // 拷贝构造函数 9 ~CMyString( void ); // 析构函数 10 CMyString& operator=( const CMyString& str ); // 赋值运算符 11 CMyString operator+( const CMyString& str ); // 字符串连接 12 bool operator==( const CMyString& str ); // 判断相等 13 char operator[]( int idx ); // 数组索引 14 int getLength(); // 返回长度 15 };
1 CMyString::CMyString( const char* str ) 2 { 3 if ( !str ) 4 { 5 this->m_pData = 0; 6 } 7 else 8 { 9 this->m_pData = new char[ strlen( str ) + 1 ]; 10 strcpy( this->m_pData, str ); 11 } 12 } 13 14 CMyString::CMyString( const CMyString& str ) 15 { 16 if ( !str.m_pData ) 17 { 18 this->m_pData = 0; 19 } 20 else 21 { 22 this->m_pData = new char[ strlen( str.m_pData ) + 1 ]; 23 strcpy( this->m_pData, str.m_pData ); 24 } 25 } 26 27 CMyString::~CMyString( void ) 28 { 29 if ( this->m_pData) 30 { 31 delete[] this->m_pData; 32 this->m_pData = 0; 33 } 34 } 35 36 CMyString& CMyString::operator=( const CMyString& str) 37 { 38 if ( this != &str ) 39 { 40 delete[] this->m_pData; 41 if ( !str.m_pData ) 42 { 43 this->m_pData = 0; 44 } 45 else 46 { 47 this->m_pData = new char[ strlen( str.m_pData ) + 1 ]; 48 strcpy( this->m_pData, str.m_pData ); 49 } 50 } 51 return *this; 52 } 53 54 CMyString CMyString::operator+( const CMyString& str ) 55 { 56 CMyString newString; 57 if ( !str.m_pData ) 58 { 59 newString = *this; 60 } 61 else if ( !this->m_pData ) 62 { 63 newString = str; 64 } 65 else 66 { 67 newString.m_pData = new char[ strlen( this->m_pData ) + strlen( str.m_pData ) + 1 ]; 68 strcpy( newString.m_pData, this->m_pData ); 69 strcat( newString.m_pData, str.m_pData ); 70 } 71 72 return newString; 73 74 } 75 76 bool CMyString::operator==( const CMyString& str ) 77 { 78 if ( strlen(this->m_pData) != strlen( str.m_pData ) ) 79 { 80 return false; 81 } 82 else 83 { 84 return strcmp( this->m_pData, str.m_pData ) ? false : true; 85 } 86 } 87 88 char CMyString::operator[]( int idx) 89 { 90 if ( idx > 0 && idx < strlen( this->m_pData ) ) 91 return this->m_pData[idx]; 92 } 93 94 int CMyString::getLength() 95 { 96 return strlen(this->m_pData); 97 } 98 99 std::ostream& operator<<( std::ostream& os, const CMyString& str ) 100 { 101 os<< str.m_pData; 102 return os; 103 }