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

面试题 相关文章推荐
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
Oct 05 面试题
怎样声明接口
Sep 19 面试题
广州御银科技股份有限公司试卷(C++)
Nov 04 面试题
经典c++面试题五
Dec 17 面试题
如何为DataGridView添加一个定制的Column Type
Jan 21 面试题
2019年.net常见面试问题
Feb 12 面试题
傲盾软件面试题
Aug 17 面试题
接口的多继承会带来哪些问题
Aug 17 面试题
C#如何进行LDAP用户校验
Nov 21 面试题
Linux内核产生并发的原因
Nov 08 面试题
一套中级Java程序员笔试题
Jan 14 面试题
Java中各种基本数据类型的默认值都是什么
Dec 22 面试题
编写strcpy函数
Jun 24 #面试题
C/C++ 笔试、面试题目大汇总
Nov 21 #面试题
统计每一学生的平均成绩
Jun 06 #面试题
文件中有一组整数,要求排序后输出到另一个文件中
Jan 04 #面试题
上海奥佳笔试题面试题
Nov 16 #面试题
将一个文本文件的内容按倒序打印出来
Jan 05 #面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
Aug 04 #面试题
You might like
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
php 定界符格式引起的错误
2011/05/24 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
PHP写日志的实现方法
2014/11/05 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
Jquery 一次处理多个ajax请求的代码
2011/09/02 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
python实现的udp协议Server和Client代码实例
2014/06/04 Python
轻松实现python搭建微信公众平台
2016/02/16 Python
Python 装饰器使用详解
2017/07/29 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
分析经典Python开发工程师面试题
2019/04/08 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
学前教育求职自荐信范文
2013/12/25 职场文书
结婚周年感言
2014/02/24 职场文书
宣传部部长竞选演讲稿
2014/04/26 职场文书
计生专干事迹
2014/05/28 职场文书
校园文化标语
2014/06/18 职场文书
学校政风行风整改方案
2014/10/25 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang