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

面试题 相关文章推荐
会话Bean的种类
Nov 07 面试题
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
Jul 17 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
Jul 30 面试题
对于没有初始化的变量的初始值可以作怎样的假定
Oct 12 面试题
如何打印出当前源文件的文件名以及源文件的当前行号
Apr 05 面试题
Android interview questions
Dec 25 面试题
视图的作用
Dec 19 面试题
网络工程师面试(三木通信技术有限公司)
Jun 05 面试题
在Ajax应用中信息是如何在浏览器和服务器之间传递的
May 31 面试题
如何整合JQuery和Prototype
Jan 31 面试题
什么时候需要进行强制类型转换
Sep 03 面试题
Java面试题冲刺第十七天--基础篇3
Aug 07 面试题
编写strcpy函数
Jun 24 #面试题
C/C++ 笔试、面试题目大汇总
Nov 21 #面试题
统计每一学生的平均成绩
Jun 06 #面试题
文件中有一组整数,要求排序后输出到另一个文件中
Jan 04 #面试题
上海奥佳笔试题面试题
Nov 16 #面试题
将一个文本文件的内容按倒序打印出来
Jan 05 #面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
Aug 04 #面试题
You might like
用PHP制作静态网站的模板框架
2006/10/09 PHP
php将会员数据导入到ucenter的代码
2010/07/18 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
实例讲解php将字符串输出到HTML
2019/01/27 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
学习YUI.Ext 第七天--关于View&JSONView
2007/03/10 Javascript
Firefox div高度自适应
2009/04/28 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
JS删除数组元素的函数介绍
2013/03/27 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
JQuery基础语法小结
2015/02/27 Javascript
常用jQuery代码分享
2015/07/14 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
Vue单页及多页应用全局配置404页面实践记录
2018/05/22 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
pycharm远程开发项目的实现步骤
2019/01/20 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
Python中and和or如何使用
2020/05/28 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
Python截图并保存的具体实例
2021/01/14 Python
办公室文员工作自我评价
2013/12/01 职场文书
教师对学生的评语
2014/04/28 职场文书
就业意向书
2014/07/29 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
基于python实现银行管理系统
2021/04/20 Python
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL