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

面试题 相关文章推荐
空指针到底是什么
Aug 07 面试题
触发器(trigger)的功能都有哪些?写出一个触发器的例子
Sep 17 面试题
金士达面试非笔试
Mar 14 面试题
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
Jul 26 面试题
linux面试相关问题
Aug 11 面试题
如何开启linux的ssh服务
Feb 14 面试题
Linux面试题LINUX系统类
Nov 19 面试题
数据库测试通常都包括哪些方面
Nov 30 面试题
如何开发安全的AJAX应用
Mar 26 面试题
Java面试题:说出如下代码的执行结果
Oct 30 面试题
Tomcat的缺省是多少,怎么修改
Apr 09 面试题
J2EE中的容器都包括哪些
Aug 21 面试题
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文件上传类分享
2014/11/18 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
动手学习无线电
2021/03/10 无线电
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
python自动化测试实例解析
2014/09/28 Python
谈谈Python中的while循环语句
2019/03/10 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
多个python文件调用logging模块报错误
2020/02/12 Python
Python timeit模块原理及使用方法
2020/10/10 Python
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
荷兰音乐会和音乐剧门票订购网站:Topticketshop
2019/08/27 全球购物
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
电气专业应届生求职信
2013/11/01 职场文书
合作协议书格式
2014/08/19 职场文书
交通工程专业推荐信
2014/09/06 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
个人年终总结开头
2015/03/06 职场文书
2015年新农合工作总结
2015/03/30 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
经费申请报告范文
2015/05/18 职场文书
主持稿开场白
2015/06/01 职场文书