/* 這類看著熟悉不?林銳大哥書上的,嘿嘿,好多公司都考啊! 大家給挑挑錯誤,改進一下.順便解答一下我的疑問 */
?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
七星重劍 閱讀(4875)
評論(15) 編輯 收藏 引用 所屬分類:
面試筆試