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

面试题 相关文章推荐
如何提高JDBC的性能
Apr 30 面试题
main 函数执行以前,还会执行什么代码
Apr 17 面试题
在C中是否有模拟继承等面向对象程序设计特性的好方法
May 22 面试题
C语言变量的命名规则都有哪些
Dec 27 面试题
聚网科技C++面试笔试题
Sep 01 面试题
经典c++面试题五
Dec 17 面试题
Oracle中delete,truncate和drop的区别
May 05 面试题
用友笔试题目
Oct 25 面试题
ShellScript面试题一则-ShellScript编程
Mar 05 面试题
施惠特软件测试面试题以及笔试题
May 13 面试题
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
Apr 07 面试题
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
Jul 02 面试题
编写strcpy函数
Jun 24 #面试题
C/C++ 笔试、面试题目大汇总
Nov 21 #面试题
统计每一学生的平均成绩
Jun 06 #面试题
文件中有一组整数,要求排序后输出到另一个文件中
Jan 04 #面试题
上海奥佳笔试题面试题
Nov 16 #面试题
将一个文本文件的内容按倒序打印出来
Jan 05 #面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
Aug 04 #面试题
You might like
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
php文件上传类完整实例
2016/05/14 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
PHP7如何开启Opcode打造强悍性能详解
2018/05/11 PHP
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
2015/03/14 Javascript
javascript中this的四种用法
2015/05/11 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
js实现微信聊天效果
2020/08/09 Javascript
python 将有序数组转换为二叉树的方法
2019/03/26 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
Django crontab定时任务模块操作方法解析
2020/09/10 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
植树节口号
2014/06/21 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书
Python一些基本的图像操作和处理总结
2021/06/23 Python
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL