编写类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的面试题
May 06 面试题
华为C++笔试题
Aug 05 面试题
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
Feb 10 面试题
C/C++ 笔试、面试题目大汇总
Nov 21 面试题
广州迈达威.net面试题目
Mar 10 面试题
.NET程序员的几道面试题
Jun 01 面试题
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
Jul 26 面试题
linux面试题参考答案(2)
Dec 06 面试题
介绍一下write命令
Sep 24 面试题
Python的两道面试题
Jun 29 面试题
Python中pass语句的作用是什么
Jun 01 面试题
静态变量和实例变量的区别
Jul 07 面试题
编写strcpy函数
Jun 24 #面试题
C/C++ 笔试、面试题目大汇总
Nov 21 #面试题
统计每一学生的平均成绩
Jun 06 #面试题
文件中有一组整数,要求排序后输出到另一个文件中
Jan 04 #面试题
上海奥佳笔试题面试题
Nov 16 #面试题
将一个文本文件的内容按倒序打印出来
Jan 05 #面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
Aug 04 #面试题
You might like
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
JQuery 常用方法基础教程
2009/02/06 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
python图片验证码生成代码
2016/07/02 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
python实现折半查找和归并排序算法
2017/04/14 Python
python放大图片和画方格实现算法
2018/03/30 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
python怎么对数字进行过滤
2020/07/05 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
Django自带的用户验证系统实现
2020/12/18 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
学习演讲稿范文
2014/05/10 职场文书
门店业绩提升方案
2014/06/08 职场文书
商务英语专业求职信
2014/06/26 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
表彰大会新闻稿
2015/07/17 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python