编写类String 的构造函数、析构函数和赋值函数


Posted in 面试题 onSeptember 09, 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...

面试题 相关文章推荐
说出ArrayList,Vector, LinkedList的存储性能和特性
Jan 04 面试题
Tomcat中怎么使用log4j输出所有的log
Jul 07 面试题
判断单链表中是否存在环
Jul 16 面试题
C/C++程序员常见面试题二
Nov 19 面试题
将一个文本文件的内容按倒序打印出来
Jan 05 面试题
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
May 18 面试题
.NET笔试题(20个问题)
Feb 02 面试题
TCP/IP中的TCP和IP分别承担什么责任
Apr 21 面试题
简述DNS进行域名解析的过程
Dec 02 面试题
初级软件工程师面试题 Junior Software Engineer Interview
Feb 15 面试题
什么是makefile? 如何编写makefile?
Aug 08 面试题
J2EE系统只能是基于web
Sep 08 面试题
编写strcpy函数
Jun 24 #面试题
C/C++ 笔试、面试题目大汇总
Nov 21 #面试题
统计每一学生的平均成绩
Jun 06 #面试题
文件中有一组整数,要求排序后输出到另一个文件中
Jan 04 #面试题
上海奥佳笔试题面试题
Nov 16 #面试题
将一个文本文件的内容按倒序打印出来
Jan 05 #面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
Aug 04 #面试题
You might like
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
2014/05/04 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
php curl 上传文件代码实例
2015/04/27 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
2015/06/10 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
python Django框架实现自定义表单提交
2016/03/25 Python
Python中字符串的处理技巧分享
2016/09/17 Python
详解Python中的type和object
2018/08/15 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
质量承诺书怎么写
2014/05/24 职场文书
作风转变年心得体会
2014/10/22 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js