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

面试题 相关文章推荐
链表面试题-一个链表的结点结构
May 04 面试题
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
Sep 06 面试题
用C#语言写出在本地创建一个UDP接收端口的具体过程
Feb 22 面试题
类和结构的区别
Aug 15 面试题
C#面试题问题集
Apr 02 面试题
linux面试题参考答案(6)
Jun 23 面试题
Python面试题:如何用Python来发送邮件
Mar 15 面试题
同步和异步有何异同,在什么情况下分别使用他们?
Dec 28 面试题
灵泰克Java笔试题
Jan 09 面试题
三个Unix的命令面试题
Apr 12 面试题
程序员经常用到的UNIX命令
Apr 13 面试题
DELPHI中如何调用API,可举例说明
Jan 16 面试题
编写strcpy函数
Jun 24 #面试题
C/C++ 笔试、面试题目大汇总
Nov 21 #面试题
统计每一学生的平均成绩
Jun 06 #面试题
文件中有一组整数,要求排序后输出到另一个文件中
Jan 04 #面试题
上海奥佳笔试题面试题
Nov 16 #面试题
将一个文本文件的内容按倒序打印出来
Jan 05 #面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
Aug 04 #面试题
You might like
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
PHP的反射机制实例详解
2017/03/29 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
JavaScript OOP类与继承
2009/11/15 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
[59:08]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第一局
2016/02/27 DOTA
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
python实现抖音视频批量下载
2018/06/20 Python
在python中做正态性检验示例
2019/12/09 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
毕业生找工作的求职信范文
2013/12/24 职场文书
教师申诉制度
2014/01/29 职场文书
寒假家长评语大全
2014/04/16 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
我的生日感言
2015/08/03 职场文书
九年级化学教学反思
2016/02/22 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
如何解决php-fpm启动不了问题
2021/11/17 PHP
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫