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


Posted in 面试题 onSeptember 09, 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...

面试题 相关文章推荐
PHP面试题大全
Oct 16 面试题
为什么要优先使用同步代码块而不是同步方法?
Jan 30 面试题
南京迈特望C/C++面试题
Jul 09 面试题
使用索引有什么好处
Jul 27 面试题
武汉英思工程科技有限公司–ORACLE面试测试题目
Apr 30 面试题
北京泡泡网网络有限公司.net面试题
Jul 17 面试题
杭州信雅达系统.NET工程师面试试题
Feb 08 面试题
linux下进程间通信的方式
Jan 23 面试题
外企测试工程师面试题
Feb 01 面试题
remote接口和home接口主要作用
May 15 面试题
JAVA中运算符的分类及举例
Sep 12 面试题
编写strcpy函数
Jun 24 #面试题
C/C++ 笔试、面试题目大汇总
Nov 21 #面试题
统计每一学生的平均成绩
Jun 06 #面试题
文件中有一组整数,要求排序后输出到另一个文件中
Jan 04 #面试题
上海奥佳笔试题面试题
Nov 16 #面试题
将一个文本文件的内容按倒序打印出来
Jan 05 #面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
Aug 04 #面试题
You might like
Thinkphp微信公众号支付接口
2016/08/04 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
jquery文字上下滚动的实现方法
2013/03/22 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
原生JS和jQuery操作DOM对比总结
2017/01/19 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
webpack之devtool详解
2018/02/10 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
基于python3的socket聊天编程
2020/02/17 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
合伙协议书范本
2014/04/21 职场文书
听课评语大全
2014/04/30 职场文书
英语专业自荐书
2014/06/13 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
2014年实习生工作总结
2014/11/27 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python