编写类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...

面试题 相关文章推荐
如何将整数int转换成字串String
Mar 21 面试题
天逸系统(武汉)有限公司Java笔试题
Dec 29 面试题
写出程序把一个链表中的接点顺序倒排
Apr 28 面试题
利用指针变量实现队列的入队操作
Apr 07 面试题
查询优化的一般准则有哪些
Mar 08 面试题
私有程序集与共享程序集有什么区别
Apr 05 面试题
动态密码技术
Oct 18 面试题
某公司C#程序员面试题笔试题
May 26 面试题
通用C#笔试题附答案
Nov 26 面试题
Linux的主要特性
Sep 03 面试题
介绍一下XMLHttpRequest对象的常用方法和属性
May 24 面试题
Servlet都有哪些方法?主要作用是什么?
Mar 04 面试题
编写strcpy函数
Jun 24 #面试题
C/C++ 笔试、面试题目大汇总
Nov 21 #面试题
统计每一学生的平均成绩
Jun 06 #面试题
文件中有一组整数,要求排序后输出到另一个文件中
Jan 04 #面试题
上海奥佳笔试题面试题
Nov 16 #面试题
将一个文本文件的内容按倒序打印出来
Jan 05 #面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
Aug 04 #面试题
You might like
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
php发送短信验证码完成注册功能
2015/11/24 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
Raphael带文本标签可拖动的图形实现代码
2013/02/20 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
Python3字符串学习教程
2015/08/20 Python
python 日期操作类代码
2018/05/05 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
Java的for语句中break, continue和return的区别
2013/12/19 面试题
建筑经济管理专业求职信分享
2014/01/06 职场文书
文明城市创建标语
2014/06/16 职场文书
2015欢度元旦标语口号
2014/12/09 职场文书
工作表扬信
2015/01/17 职场文书
展览会邀请函
2015/02/02 职场文书
教师思想工作总结2015
2015/05/13 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL