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

本文详细介绍了C++中字符串复制函数strCopy的实现,包括边界检查、内存分配与释放,并通过String类展示了如何使用类封装字符串操作,包含构造函数、赋值运算符和输出方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.} 


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/ljob2006/archive/2009/03/18/4001372.aspx

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值