/* 这类看着熟悉不?林锐大哥书上的,嘿嘿,好多公司都考啊! 大家给挑挑错误,改进一下.顺便解答一下我的疑问 */
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()(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 }
posted on 2006-07-13 22:21
七星重剑 阅读(4861)
评论(15) 编辑 收藏 引用 所属分类:
面试笔试