面试题:写一个string类
来源:互联网 发布:成都java培训机构学费 编辑:程序博客网 时间:2024/05/16 07:46
一个string类主要包括构造函数、析构函数、拷贝构造函数和赋值构造函数
(1)构造函数需要注意的是:当构造函数参数为空时,string类中为char* pdata成员,因此在初始化成员列表中需开辟一个字节的空间,并且赋初始值为‘\0’,因为在字符串是以'\0'结尾的,会占用一个字节;
当构造函数参数为字符串时,需注意字符串的长度计算方法为strlen(ptr)+1
(2)析构函数需要注意:需使用delete[] pdata;
(3)拷贝构造函数需要注意:参数为引用,即为值本身传递,否则会导致拷贝构造函数调用拷贝构造函数,造成无限递归。
(4)赋值构造函数需要注意:返回值为引用,以便满足像a = b = c这样的连锁赋值; 并且考虑异常安全性和自我赋值,采用copy &swap 方式
并且赋值构造函数需返回*this。具体可看effective C++
具体实现代码如下:
#ifndef _MY_STRING_H_#define _MY_STRING_H_#include <stdio.h>#include <string.h>class mystring_t{public://构造函数mystring_t() : m_pbuf(new char[1]){*m_pbuf = '\0';}mystring_t(const char *pbuf) : m_pbuf(new char[strlen(pbuf)+1]){if (m_pbuf){strcpy(m_pbuf, pbuf);}}//析构函数~mystring_t(){delete[] m_pbuf;m_pbuf = NULL;}//拷贝构造函数mystring_t(const mystring_t& other){mystring_t temp(other);//交换两者char *ptemp = temp.m_pbuf;temp.m_pbuf = m_pbuf;m_pbuf = ptemp;}//赋值构造函数mystring_t& operator=(const mystring_t &str){if (this != &str){mystring_t temp(str);//交换两者char *ptemp = temp.m_pbuf;temp.m_pbuf = m_pbuf;m_pbuf = ptemp;}return *this;}//第二种写法://赋值构造函数/*mystring_t& operator=(const mystring_t &str){if (this != &str){delete[] m_pbuf;m_pbuf = NULL;m_pbuf = new char[strlen(str.m_pbuf)+1];strcpy(m_pbuf,str.m_pbuf);}return *this;}*/private:char *m_pbuf;};#endif
0 0
- 面试题:写一个string类
- String类面试题
- 面试题 String类
- 面试题:写一个算法把String类型转int类型
- 一个String相关的面试题
- 一个关于String.valueof()的面试题
- 有关String对象的一个面试题
- 面试题 - 写一个atoi()吧
- 面试题:写一个memmove函数
- 一个面试题,我写的算法
- Java String类面试题
- String类常见面试题
- Java String 类面试题
- 【C++常见面试题:实现一个string 类】-深拷贝&浅拷贝&string类
- 面试题:String类的浅拷贝、深拷贝、写时拷贝
- C++面试题(二)——自己实现一个String类
- 对一个考察final和String类的面试题的思考
- C++面试题(二)——自己实现一个String类
- HDU 1014.Uniform Generator【模拟及优化】【8月16】
- C++命名规则
- C#实现远程桌面自动登录
- Prototype(原型)设计模式
- android图片选择由于版本导致的oom解决办法
- 面试题:写一个string类
- Android中自定义Toast
- javascript数字转大写
- 新项目上架遇到的问题及解决方案90034(1)
- Java学习之路0804<复习>(线程、注解)
- 进程间通信(七)mmap
- Myeclipse 经常loading descriptor for XXX ,然后卡死
- grafana-zabbix配置图形模板
- 如何高效产生m个n范围内的不重复随机数(m<=n)