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

面试题 相关文章推荐
PHP如何自定义函数
Sep 16 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
Jul 30 面试题
异常和异常类的概念
Sep 12 面试题
联强国际笔试题面试题
Jul 10 面试题
如何找出EMP表里面SALARY第N高的employee
Dec 05 面试题
.NET面试题:什么是反射
Sep 30 面试题
西安启天科技有限公司网络工程师面试题笔试题
Jun 12 面试题
几个Linux面试题笔试题
Aug 01 面试题
进程的查看和调度分别使用什么命令
Mar 25 面试题
广州某公司软件工程师面试题
Dec 22 面试题
Java程序员面试90题
Oct 19 面试题
J2EE中的容器都包括哪些
Aug 21 面试题
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 快速生成 Flash 动画的方法
2007/03/06 PHP
php intval的测试代码发现问题
2008/07/27 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Django的session中对于用户验证的支持
2015/07/23 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
selenium+python实现自动登录脚本
2018/04/22 Python
python3.4爬虫demo
2019/01/22 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
python正则-re的用法详解
2019/07/28 Python
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
上班玩游戏检讨书
2014/02/07 职场文书
送餐员岗位职责范本
2014/02/21 职场文书
法制报告会主持词
2014/04/02 职场文书
篮球赛口号
2014/06/18 职场文书
诚信承诺书
2015/01/19 职场文书
工作态度怎么写
2015/06/25 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP