CString Class Programming!

CString Class Programming!

class  String
 2  {
 3  public :
 4      String( const   char   * str  =  NULL);     //  普通构造函数
 5      String( const  String  & other);         //  拷贝构造函数
 6       ~ String( void );                         //  析构函数
 7      String  &   operator   = ( const  String  & other);     //  赋值函数
 8       const   char *   operator ()( void const ;
 9  private :
10       char        * m_data;                 //  用于保存字符串
11  };
12 
13 
14  String:: ~ String( void )
15  {
16      delete[] m_data;
17  }
18 
19  String::String( const   char *  str)
20  {
21       if (NULL  ==  str)
22      {
23           //  不能让新对象的m_data为NULL
24          m_data  =   new   char [ 1 ];
25           * m_data  =   ' \0 ' ;
26      }    
27       else
28      {
29           int  length  =  strlen(str);
30          m_data  =   new   char [length  +   1 ];
31          strcpy(m_data, str);
32      }
33  }
34 
35  String::String( const  String &  other)  /*  因为是新构造一个对象,所以不需要像operator=一样判断自赋值及释放原来的内存  */
36  {
37       int  length  =  strlen(other.m_data);
38      m_data  =   new   char [length  +   1 ];
39      strcpy(m_data, other.m_data);
40  }
41 
42  String &  String:: operator   = ( const  String &  other)
43  {
44       //  判断自赋值
45       if ( this   ==   & other)
46           return   * this ;
47       //  释放原来的内存
48      delete [] m_data;
49 
50       int  length  =  strlen(other.m_data);  /*  虽然m_data是private,但因为是在String的成员函数里,故没问题  */
51      m_data  =   new   char [length  +   1 ];
52      strcpy(m_data, other.m_data);
53 
54       return   * this ;
55 
56  }
57 
58  const   char   *  String:: operator ()()  const
59  {
60       return  ( const   char * )m_data;
61  }
62
63  int  _tmain( int  argc, _TCHAR *  argv[])
64  {
65      String str( " hello " );
66      String str1  =  str;  /*  这儿调用的是copy constructor,非 operator=, why?  */
67      printf( " %s\n " , str1);
68 
69       const   char *  str2  =  str();
70      printf( " %s\n " , str2);
71 
72       return   0 ;
73  }

你可能感兴趣的:(CString Class Programming!)