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

面试题 相关文章推荐
一家外企的面试题目(C/C++面试题,C语言面试题)
Mar 24 面试题
什么是聚集索引和非聚集索引
Jan 17 面试题
.net笔试题
Mar 03 面试题
什么是Smart Navigation?
Jul 03 面试题
什么是三层交换,说说和路由的区别在那里
Sep 01 面试题
C#面试题问题集
Apr 02 面试题
linux面试题参考答案(7)
Oct 29 面试题
linux下进程间通信的方式
Jan 23 面试题
国外软件测试工程师面试题
Dec 09 面试题
如何提高MySql的安全性
Jun 19 面试题
与C++相比,Java中的数组有什么不同
Mar 25 面试题
金鑫耀Java笔试题
Sep 06 面试题
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连接操作access数据库实例
2015/03/30 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
python爬虫实例详解
2018/06/19 Python
python实现自主查询实时天气
2018/06/22 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
4s店总经理岗位职责
2013/12/31 职场文书
八年级音乐教学反思
2014/01/09 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
保护环境建议书100字
2014/05/13 职场文书
2014年党务工作总结
2014/11/25 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
社区端午节活动总结
2015/02/11 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
借钱欠条怎么写
2015/07/03 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
vue实力踩坑之push当前页无效
2022/04/10 Vue.js
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL