HUUYUU

CString Class Programming!

1 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()(voidconst;
 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 }

posted on 2006-07-28 12:56 HUYU 阅读(209) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理