`

编写类String的构造函数、析构函数和赋值函数

阅读更多

01.#include <iostream.h>
02.#include <assert.h>
03.
04.
05.
06.char* strCopy(char* pDest, const char* pSrc)
07.{
08. assert((pDest != NULL) && (pSrc != NULL));
09.
10.
11. char *pTmp = pDest;
12. while (*pSrc!='\0')
13. {
14. *pDest=*pSrc;
15. pDest++;
16. pSrc++;
17. }
18. *pDest=NULL;
19. return pTmp;
20.}
21.
22.int strlength(const char *str)
23.{
24. int len=0;
25. for(int i=0;str[i]!=NULL;i++)
26. len++;
27.
28. return len;
29.}
30.
31.
32.
33.class String
34.{
35.public:
36.
37. String(const char *str = NULL); // 普通构造函数
38. String(const String &other); // 拷贝构造函数
39. ~String();
40. String & operator =(const String &other);
41. void output();
42.
43.private:
44. char* m_data; // 用于保存字符串
45.
46.};
47.
48.String::~String()
49.{
50. delete[] m_data;
51.}
52.
53.String::String(const char *str)
54.{
55. if(str==NULL)
56. {
57. m_data = new char[1]; // 若能加 NULL 判断则更好
58. *m_data = NULL;
59. }
60.
61. else
62. {
63. int length = strlength(str);
64. m_data = new char[length+1]; // 若能加 NULL 判断则更好
65. strCopy(m_data, str);
66. }
67.}
68.
69.String::String(const String &other)
70.{
71. int length = strlength(other.m_data);
72. m_data=new char [length+1];
73.
74. strCopy(m_data,other.m_data);
75.}
76.
77.String & String::operator =(const String &other)
78.
79.{
80. if(this == &other)
81. return *this;
82.
83. delete [] m_data;
84.
85.
86. int length = strlength(other.m_data);
87. m_data = new char[length+1];
88. strCopy(m_data, other.m_data);
89.
90. return *this;
91.}
92.
93.
94.void String::output()
95.{
96. cout<<m_data<<endl;
97.}
98.
99.
100.int main()
101.{
102. String s1("zhuzai");
103. s1.output();
104. String s2("11sunhongfeng");
105. s1=s2;
106. s1.output();
107.
108. return 1;
109.}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ljob2006/archive/2009/03/18/4001372.aspx

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics