C++实现String类
2018-03-12 18:59
429 查看
最近面试的笔试题,连续两次遇到此题目,作个记录。
题目:用C++实现下面String类中4个函数。
答案:
如果经常使用C++库对String类会比较熟悉,但很多人用C++大部分时候都是写Qt,此时,一般都是用QString类,其实只要思考下,这两个类都是比较相似。熟悉String类的前提下,用C++实现各个函数思路会比较清晰。
1、普通构造函数 :
2、拷贝构造函数
3、析构函数:
4、赋值函数
题目:用C++实现下面String类中4个函数。
class String { public: String(const char *str = NULL);// 普通构造函数 String(const String &other);// 拷贝构造函数 ~String(void);// 析构函数 String & operator = (const String &other);// 赋值函数 private: char *m_data;// 用于保存字符串 };
答案:
如果经常使用C++库对String类会比较熟悉,但很多人用C++大部分时候都是写Qt,此时,一般都是用QString类,其实只要思考下,这两个类都是比较相似。熟悉String类的前提下,用C++实现各个函数思路会比较清晰。
1、普通构造函数 :
String::String(const char *str) { if (str == NULL) { m_data = new char[1]; if(m_data != NULL) //申请内存检查是否申请成功 *m_data = '\0'; else return; } else { int length = strlen(str); m_data = new char[length + 1]; if(m_data != NULL) strcpy(m_data, str); else return; } }
2、拷贝构造函数
String::String(const String &other) { int length = strlen(other.m_data); m_data = new char[length + 1]; if(m_data != NULL) strcpy(m_data, other.m_data); }
3、析构函数:
String::~String(void) { delete m_data; m_data = NULL; //释放内存后,地址指向NULL,养成好习惯。 }
4、赋值函数
String & String::operator = (const String &other) { if (this == &other)//检查自赋值 return *this; if (m_data) { delete m_data;//释放原有的内存资源 m_data = NULL; } int length = strlen(other.m_data); m_data = new char[length + 1]; if(m_data != NULL) strcpy(m_data, other.m_data); else return NULL; return *this;//返回本对象的引用 }
相关文章推荐
- C++笔试题之String类的实现
- String类的字符串操作(C++实现)
- String类的实现 三大复制控制函数(C++笔试题 )
- C++【String类】String插入单个字符,插入字符串的函数实现
- C++的String类的字符串分割实现----(效果等于Java的String类的split函数)
- C++【常见面试题】String类的实现,以及深拷贝、浅拷贝问题
- 【String类浅拷贝的实现】C++:String类引用计数浅拷贝的两种实现
- c++模拟动态语言中string类的实现
- c++实现string类
- C++ 05 string类的实现
- [C++]String类的实现
- C++实现String类
- 用C++重写String类,实现并不是最完美的,欢迎指正补充!后续还有更多类似的实现放上来, 欢迎关注!!!
- 探究C++中string类的实现原理以及扩展使用
- 【C++】String类实现
- C++实现数字转为字符串string类对象
- C++自定义String类(简单的实现功能)
- 详解C++中实现继承string类的MyString类的步骤
- C++实现String类
- 【c++】模拟实现string类__实现增删查改