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

面试题 相关文章推荐
2019年Java面试必问之经典试题
Sep 12 面试题
北承题目(C++)
May 16 面试题
Oracle的内存结构(Memory structures)
Jun 10 面试题
为什么UNION ALL比UNION快
Mar 17 面试题
程序集与命名空间有什么不同
Jul 25 面试题
.NET面试问题集
Dec 08 面试题
C#里面如何判断一个Object是否是某种类型(如Boolean)?
Feb 10 面试题
Ajax的优点和缺点
Nov 21 面试题
MYSQL相比于其他数据库有哪些特点
Jul 19 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
Jul 06 面试题
Java基础面试题
Nov 02 面试题
Unix如何在一行中运行多个命令
May 29 面试题
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
中国第一家无线电行
2021/03/01 无线电
一个程序下载的管理程序(三)
2006/10/09 PHP
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
详解JavaScript中Hash Map映射结构的实现
2016/05/21 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
python+ffmpeg视频并发直播压力测试
2018/03/06 Python
对numpy中shape的深入理解
2018/06/15 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
公积金单位接收函
2014/01/11 职场文书
三查三看党性分析材料
2014/02/18 职场文书
初中教师业务学习材料
2014/05/12 职场文书
应届生求职信范文
2014/06/30 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis
python字符串常规操作大全
2021/05/02 Python