page contents

编写类String的构造函数、析构函数和赋值函数,已知类String的原型为?

轩辕小不懂 发布于 2022-06-23 14:50
阅读 24
收藏 0
分类:C/C++开发
3835
Nen
Nen
- 程序员

class String

{

public:

    String(const char *str = NULL); // 普通构造函数

    String(const String &other); // 拷贝构造函数

    ~ String(void); // 析构函数

    String & operator =(const String &other); // 赋值函数

private:

    char *m_data; // 用于保存字符串

};

1 //普通构造函数

 2 String::String(const char *str)

 3 {

 4     if(str==NULL)

 5     {

 6         m_data = new char[1];   // 得分点:对空字符串自动申请存放结束标志'\0'的空

 7         *m_data = '\0';         //加分点:对m_data加NULL 判断

 8     }

 9     else

10     {

11         int length = strlen(str);

12         m_data = new char[length+1];    // 若能加 NULL 判断则更好

13         strcpy(m_data, str);

14     }

15 }

16 // String的析构函数

17 String::~String(void)

18 {

19     delete [] m_data;

20 }

21 //拷贝构造函数

22 String::String(const String &other) // 得分点:输入参数为const型

23 {

24     int length = strlen(other.m_data);

25     m_data = new char[length+1];    //加分点:对m_data加NULL 判断

26     strcpy(m_data, other.m_data);

27 }

28 //赋值函数

29 String & String::operator =(const String &other) // 得分点:输入参数为const型

30 {

31     if(this == &other)  //得分点:检查自赋值

32         return *this;

33     delete [] m_data;   //得分点:释放原有的内存资源

34     int length = strlen( other.m_data );

35     m_data = new char[length+1];    //加分点:对m_data加NULL 判断

36     strcpy( m_data, other.m_data );

37     return *this;   //得分点:返回本对象的引用

38 }

请先 登录 后评论