编写类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的面试题
May 06 面试题
C语言笔试集
Jul 24 面试题
为数据库创建索引都需要注意些什么
Jul 17 面试题
SQL数据库笔试题
Mar 08 面试题
数据库基础的一些面试题
Feb 25 面试题
ddl,dml和dcl的含义
May 08 面试题
网上常见的一份Linux面试题(多项选择部分)
Feb 07 面试题
为什么需要版本控制?
Aug 08 面试题
方正Java笔试题
Jul 03 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Jul 27 面试题
解释一下ruby中的特殊方法与特殊类
Feb 26 面试题
Delphi软件工程师试题
Jan 29 面试题
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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
PHP_MySQL教程-第一天
2007/03/18 PHP
两种设置php载入页面时编码的方法
2014/07/29 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
[01:15:00]LGD vs Mineski Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
python中解析json格式文件的方法示例
2017/05/03 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python实现推箱子游戏
2020/03/25 Python
python统计中文字符数量的两种方法
2019/01/31 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
tensorflow 模型权重导出实例
2020/01/24 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
python interpolate插值实例
2020/07/06 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
基本款天堂:Everlane
2017/05/13 全球购物
Java中实现多态的机制
2015/08/09 面试题
个人求职信范文分享
2014/01/31 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
毕业生个人总结
2015/02/28 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技