编写类String的构造函数、析构函数和赋值函数


Posted in 面试题 onMay 29, 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...

面试题 相关文章推荐
JAVA代码查错题
Oct 10 面试题
凌阳科技股份有限公司C++程序员面试题笔试题
Nov 20 面试题
SQL SERVER面试资料
Mar 30 面试题
介绍一下木马病毒的种类
Jul 26 面试题
C#中的验证控件有几种
Mar 08 面试题
介绍一下grep命令的使用
Jun 12 面试题
linux面试相关问题
Apr 28 面试题
DOM和JQuery对象有什么区别
Nov 11 面试题
什么是lambda函数
Sep 17 面试题
Structs界面控制层技术
Oct 11 面试题
介绍一些UNIX常用简单命令
Nov 11 面试题
UNIX文件名称有什么规定
Mar 25 面试题
C++:memset ,memcpy和strcpy的根本区别
Apr 27 #面试题
C++的几个面试题附答案
Aug 03 #面试题
为什么会有内存对齐
Oct 10 #面试题
数组越界问题
Oct 21 #面试题
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
Feb 22 #面试题
介绍一下#error预处理
Sep 25 #面试题
const char*, char const*, char*const的区别是什么
Jul 09 #面试题
You might like
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
JavaScript判断变量是否为空的自定义函数分享
2015/01/31 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
python3访问sina首页中文的处理方法
2014/02/24 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
python 检查文件mime类型的方法
2018/12/08 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
python实现单链表的方法示例
2019/09/03 Python
python路径的写法及目录的获取方式
2019/12/26 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
python lambda的使用详解
2021/02/26 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
UGG英国官方网站:UGG UK
2018/02/08 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
写给父母的感谢信
2015/01/22 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
社区党务工作总结2015
2015/05/19 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js
redis数据结构之压缩列表
2022/03/21 Redis
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android