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

面试题 相关文章推荐
类的核心特性有哪些
Jan 01 面试题
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
Jan 18 面试题
C++的几个面试题附答案
Aug 03 面试题
struct和class的区别
Nov 20 面试题
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
Jan 05 面试题
如何转换一个字符串到enum值
Apr 12 面试题
网络通讯中,端口有什么含义,端口的取值范围
Nov 23 面试题
extern是什么意思
Mar 10 面试题
Linux内核产生并发的原因
Jul 13 面试题
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
Jan 19 面试题
Java语言程序设计测试题选择题部分
Apr 03 面试题
Java程序员面试题
Sep 27 面试题
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 empty函数报错解决办法
2014/03/06 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
PHP常用的三种设计模式
2017/02/17 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
php实现文件上传基本验证
2020/03/04 PHP
浅析Cookie中的Path与domain
2013/12/18 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
Nodejs学习笔记之NET模块
2015/01/13 NodeJs
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
Python 第一步 hello world
2009/09/25 Python
Python正则表达式使用经典实例
2016/06/21 Python
Python求出0~100以内的所有素数
2018/01/23 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
如何进行Linux分区优化
2016/09/13 面试题
护理学专业推荐信
2013/12/03 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
设备管理实施方案
2014/05/31 职场文书
会计试用期自我评价
2014/09/19 职场文书
2014年行政工作总结
2014/11/19 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
员工安全责任协议书
2016/03/22 职场文书
MySQL库表名大小写的选择
2021/06/05 MySQL
解决vue中provide inject的响应式监听
2022/04/19 Vue.js