String类定义(C++经典笔试题目)
2018-01-29 10:45
381 查看
#include <cassert> #include <cstring> class String//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];// 得分点:对空字符串自动申请存放结束标志'\0'的//加分点:对m_data加NULL 判断 assert(m_data!=NULL); *m_data = '\0'; } else { int length = strlen(str); m_data = new char[length + 1];// 若能加 NULL 判断则更好 assert(m_data!=NULL); strcpy(m_data, str); } } // String的析构函数 String::~String(void) { delete[] m_data; // 不能为delete m_data; } //拷贝构造函数 String::String(const String &other)// 得分点:输入参数为const型 { if (m_data) delete[] m_data;//得分点:释放原有的内存资源,[个人觉得没必要。] int length = strlen(other.m_data); m_data = new char[length + 1];//加分点:对m_data加NULL 判断 assert(m_data!=NULL); strcpy(m_data, other.m_data); } //赋值函数 String & String::operator = (const String &other) // 得分点:输入参数为const型 { if (this == &other)//得分点:检查自赋值 return *this; if (m_data) delete[] m_data;//得分点:释放原有的内存资源 int length = strlen(other.m_data); m_data = new char[length + 1];//加分点:对m_data加NULL 判断 assert(m_data!=NULL); strcpy(m_data, other.m_data); return *this;//得分点:返回本对象的引用 } /********************************************************************************************** *剖析: *能够准确无误地编写出String类的构造函数、拷贝构造函数、赋值函数和析构函数的面试者至少已经 *具备了C++基本功的60%以上!在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量 时,一定要重载其拷贝构造函数、赋值函数和析构函数,这既是对C++程序员的基本要求,也是《Effective C++》 *中特别强调的条款。仔细学习这个类,特别注意加注释的得分点和加分点的意义,这样就具备了60%以上的C++基本功! **********************************************************************************************/
相关文章推荐
- C/C++笔试经典题目
- 经典C++笔试题目--100(C++与C差异(1-18))
- C/C++校招笔试面试经典题目总结十
- C++笔试经典题目
- C/C++校招笔试面试经典题目总结三
- C/C++校招笔试面试经典题目总结九
- C++常见笔试面试题目:string类的拷贝赋值运算符函数
- C/C++校招笔试面试经典题目总结七
- C/C++校招笔试面试经典题目总结五
- C/C++笔试经典题目
- 经典C++笔试题目--100(C++面向对象的特性(38-61))
- C/C++校招笔试面试经典题目总结四
- C++笔试经典题目总结
- C/C++校招笔试面试经典题目总结二
- C/C++校招笔试面试经典题目总结六
- C/C++校招笔试面试经典题目总结一
- C/C++校招笔试面试经典题目总结八
- C++笔试题目
- C++经典题目:约瑟夫环问题
- C/C++ 笔试、面试题目汇总