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

面试题 相关文章推荐
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
Sep 08 面试题
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
Mar 25 面试题
是什么让J2EE适合用来开发多层的分布式的应用
Jan 16 面试题
SQL Server面试题
Oct 17 面试题
查询优化的一般准则有哪些
Mar 08 面试题
不用游标的SQL语句有哪些
Sep 07 面试题
NET程序员上机面试题
May 23 面试题
Linux如何修改文件和文件夹的权限
Sep 05 面试题
易程科技软件测试笔试
Mar 24 面试题
客服端调用EJB对象的几个基本步骤
Jan 15 面试题
JSF界面控制层技术
Jun 17 面试题
Shell脚本如何向终端输出信息
Apr 25 面试题
编写strcpy函数
Jun 24 #面试题
C/C++ 笔试、面试题目大汇总
Nov 21 #面试题
统计每一学生的平均成绩
Jun 06 #面试题
文件中有一组整数,要求排序后输出到另一个文件中
Jan 04 #面试题
上海奥佳笔试题面试题
Nov 16 #面试题
将一个文本文件的内容按倒序打印出来
Jan 05 #面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
Aug 04 #面试题
You might like
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
python 操作hive pyhs2方式
2019/12/21 Python
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
C语言编程练习
2012/04/02 面试题
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
工程师求职简历的自我评价分享
2013/10/10 职场文书
汽车检测与维修应届毕业生求职信
2013/10/19 职场文书
毕业生求职推荐信
2013/11/04 职场文书
自荐书4要点
2014/01/25 职场文书
会计专业自我评价
2014/02/12 职场文书
优秀教师单行材料
2014/12/16 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
Linux系统下安装PHP7.3版本
2021/06/26 PHP
python中if和elif的区别介绍
2021/11/07 Python