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

面试题 相关文章推荐
PHP面试题大全
Oct 16 面试题
JSF面试题:Jsf中导航的标签是什么
Apr 20 面试题
Java里面有没有全局变量?为什么?
Feb 06 面试题
寻找迷宫的一条出路,o通路;X:障碍
Jul 10 面试题
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
Nov 09 面试题
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
Feb 09 面试题
如何在Oracle中查看各个表、表空间占用空间的大小
Oct 31 面试题
.net开发工程师面试题
Feb 25 面试题
什么是命名空间(NameSpace)
Nov 24 面试题
.NET面试题:什么是值类型和引用类型
Jan 12 面试题
金士达面试非笔试
Mar 14 面试题
Linux Interview Questions For software testers
Jun 02 面试题
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
在PHP中操作Excel实例代码
2010/04/29 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
常规表格多表头查询示例
2014/02/21 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
Web服务器框架 Tornado简介
2014/07/16 Python
Python中shape计算矩阵的方法示例
2017/04/21 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
python 项目目录结构设置
2020/02/14 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
个人简历的自荐信
2013/10/23 职场文书
正规的求职信范文分享
2013/12/11 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
付款承诺函范文
2015/01/21 职场文书
元宵节寄语大全
2015/02/27 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
python 中yaml文件用法大全
2021/07/04 Python
Python 多线程处理任务实例
2021/11/07 Python