编写类String的构造函数、析构函数和赋值函数


Posted in 面试题 onMay 29, 2012
已知类String的原型为:
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~ String(void); // 析构函数
String & operate =(const String &other); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
请编写String的上述4个函数。
标准答案:

// String的析构函数
String::~String(void) // 3分
{
delete [] m_data;
// 由于m_data是内部数据类型,也可以写成 delete m_data;
}

// String的普通构造函数
String::String(const char *str) // 6分
{
if(str==NULL)
{
m_data = new char[1]; // 若能加 NULL 判断则更好
*m_data = ‘\0’;
}
else
{
int length = strlen(str);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, str);
}
}
// 拷贝构造函数
String::String(const String &other) // 3分
{
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, other.m_data);
}
// 赋值函数
String & String::operate =(const String &other) // 13分
{
// (1) 检查自赋值 // 4分
if(this == &other)
return *this;

// (2) 释放原有的内存资源 // 3分
delete [] m_data;

// (3)分配新的内存资源,并复制内容 // 3分
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, other.m_data);

// (4)返回本对象的引用 // 3分
return *this;
}

Tags in this post...

面试题 相关文章推荐
什么是接口(Interface)?
Feb 01 面试题
J2SDK1.5与J2SDK5.0有什么区别
Sep 19 面试题
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
May 23 面试题
利用异或运算实现两个无符号数的加法运算
Dec 20 面试题
汇智创新科技发展有限公司
Dec 06 面试题
什么是事务?事务有哪些性质?
Mar 11 面试题
武汉世纪畅想数字传播有限公司 .NET笔试题
Jun 13 面试题
Ado与Ado.net的相同与不同
Dec 08 面试题
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
May 23 面试题
如何利用find命令查找文件
Feb 07 面试题
如何从一个文件档案的尾端新增记录
Dec 02 面试题
史上最全面的Java面试题汇总!
Feb 03 面试题
C++:memset ,memcpy和strcpy的根本区别
Apr 27 #面试题
C++的几个面试题附答案
Aug 03 #面试题
为什么会有内存对齐
Oct 10 #面试题
数组越界问题
Oct 21 #面试题
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
Feb 22 #面试题
介绍一下#error预处理
Sep 25 #面试题
const char*, char const*, char*const的区别是什么
Jul 09 #面试题
You might like
简单的PHP多图上传小程序代码
2011/07/17 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
Python 元组(Tuple)操作详解
2014/03/11 Python
Python异常处理操作实例详解
2018/08/28 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
如何通过python检查文件是否被占用
2020/12/18 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
Linux内核产生并发的原因
2016/11/08 面试题
网络程序员自荐信
2014/01/25 职场文书
社会调查研究计划书
2014/05/01 职场文书
幼师求职信
2014/06/23 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
2016年教师节感言
2015/12/09 职场文书
个人向公司借款协议书
2016/03/19 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript