/* 這類(lèi)看著熟悉不?林銳大哥書(shū)上的,嘿嘿,好多公司都考啊! 大家給挑挑錯(cuò)誤,改進(jìn)一下.順便解答一下我的疑問(wèn) */
?1?class?String
?2?{
?3?public:
?4?????String(const?char?*str?=?NULL);????//?普通構(gòu)造函數(shù)
?5?????String(const?String?&other);????????//?拷貝構(gòu)造函數(shù)
?6?????~String(void);????????????????????????//?析構(gòu)函數(shù)
?7?????String?&?operator?=(const?String?&other);????//?賦值函數(shù)
?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?????????//?不能讓新對(duì)象的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)?/*?因?yàn)槭切聵?gòu)造一個(gè)對(duì)象,所以不需要像operator=一樣判斷自賦值及釋放原來(lái)的內(nèi)存?*/
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?????//?釋放原來(lái)的內(nèi)存
48?????delete?[]?m_data;
49?
50?????int?length?=?strlen(other.m_data);?/*?雖然m_data是private,但因?yàn)槭窃赟tring的成員函數(shù)里,故沒(méi)問(wèn)題?*/
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;?/*?這兒調(diào)用的是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)
評(píng)論(15) 編輯 收藏 引用 所屬分類(lèi):
面試筆試