编写类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 30 面试题
你所知道的集合类都有哪些?主要方法?
Dec 31 面试题
神路信息Java面试题目
Mar 31 面试题
c语言常见笔试题总结
Sep 05 面试题
介绍一下SQL注入攻击的种类和防范手段
Feb 18 面试题
上海某公司.net方向笔试题
Sep 14 面试题
.NET面试题:什么是反射
Sep 30 面试题
星空联盟C# .net笔试题
Dec 05 面试题
下列程序在32位linux或unix中的结果是什么
Mar 25 面试题
Prototype如何为一个Ajax添加一个参数
Dec 06 面试题
MYSQL基础面试题
May 13 面试题
请说出这段代码执行后a和b的值分别是多少
Mar 28 面试题
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
理解Javascript_13_执行模型详解
2010/10/20 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
点击弹出层效果&弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
Django自定义过滤器定义与用法示例
2018/03/22 Python
Python日志器使用方法及原理解析
2020/09/27 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
大三自我鉴定范文
2013/10/05 职场文书
产品工艺师的岗位职责
2013/11/15 职场文书
绩效专员岗位职责
2013/12/02 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
小学生学习感言
2014/03/10 职场文书
公司年会策划方案
2014/05/17 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
个人职业及收入证明
2014/10/13 职场文书
2015年度企业工作总结
2015/05/21 职场文书
家长会开场白和结束语
2015/05/29 职场文书
暑期工社会实践报告
2015/07/13 职场文书
防震减灾主题班会
2015/08/14 职场文书
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers