编写类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面试题
Mar 07 面试题
C语言变量的命名规则都有哪些
Dec 27 面试题
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
Nov 09 面试题
什么是"引用"?申明和使用"引用"要注意哪些问题?
Mar 03 面试题
介绍一下代理模式(Proxy)
Oct 17 面试题
标记环介质访问控制协议
Mar 27 面试题
linux面试题参考答案(7)
Oct 29 面试题
介绍一下Linux文件的记录形式
Sep 29 面试题
中科软笔试题和面试题
Oct 07 面试题
介绍一下RMI的基本概念
Dec 17 面试题
什么是ESB?请介绍一下ESB?
May 27 面试题
Java软件工程师综合面试题笔试题
Sep 08 面试题
编写strcpy函数
Jun 24 #面试题
C/C++ 笔试、面试题目大汇总
Nov 21 #面试题
统计每一学生的平均成绩
Jun 06 #面试题
文件中有一组整数,要求排序后输出到另一个文件中
Jan 04 #面试题
上海奥佳笔试题面试题
Nov 16 #面试题
将一个文本文件的内容按倒序打印出来
Jan 05 #面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
Aug 04 #面试题
You might like
PHP中$_SERVER的详细参数与说明
2008/07/29 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
jquery插件制作简单示例说明
2012/02/03 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
vue组件tabbar使用方法详解
2018/11/06 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
什么是抽象
2015/12/13 面试题
土地租赁意向书
2014/07/30 职场文书
春节超市活动方案
2014/08/14 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
Java8中接口的新特性使用指南
2021/11/01 Java/Android