编写类String的构造函数、析构函数和赋值函数
2015-03-13 10:45
405 查看
当我们自定义一个类时,其构造函数、析构函数和赋值函数是最需要注意的点,为此对类String编写这三个函数来巩固自己的编程能力。
effective C++里提到:当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数.
赋值函数这里以我的另一篇博文operator =里讲的那样为准。
effective C++里提到:当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数.
class String { public: String(const char* str = NULL); String(const String &other); ~ String(void); String & operator =(const String &other); private: char *m_data; // 用于保存字符串 }; String::String(const char* str) { if(str==NULL) { m_data =new char[1];//new[] 对应 delete[] if(m_data != NULL) *m_data ='\0'; else throw bad_alloc(); } else { int length = strlen(str); m_data =new char[length+1]; if(m_data != NULL) strcpy(m_data, str); else throw bad_alloc(); } } // String的析构函数 String::~String(void) { delete [] m_data; } //拷贝构造函数 String::String(const String &other) { if(other.m_data) { int length = strlen(other.m_data); m_data =new char[length+1]; if(m_data != NULL) strcpy(m_data, other.m_data); else throw bad_alloc(); } else { m_data = new char[1]; if(m_data != NULL) *m_data = '\0'; else throw bad_alloc(); } } //赋值函数 String & String::operator =(const String &other) { if(this == &other) return *this; if(other.m_data) { if(m_data) { delete [] m_data; } m_data = new char[strlen(other.m_data) + 1]; strcpy(m_data,other.m_data); } else { m_data = new char[1]; *m_data = '\0'; } return *this; }
赋值函数这里以我的另一篇博文operator =里讲的那样为准。
相关文章推荐
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String 的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数,已知类String的原型
- 17.编写类String的构造函数、析构函数和赋值函数
- 编写类String 的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String 的构造函数、拷贝构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数(2)
- 编写String的构造函数、析构函数、赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数(转载)
- C/C++面试题:编写类String的构造函数、析构函数和赋值函数。
- 编写类String 的构造函数、析构函数和赋值函数
- 编写类String的构造函数、拷贝构造函数、析构函数、赋值函数
- 编写String的构造函数、析构函数、拷贝构造函数、赋值函数