前段时间忙于项目,难得偷得几日闲,为即将到来的就业季做准备。在面试时,应聘者要注意多和考官交流,只有具备良好的沟通能力,才能充分了解面试官的需求,从而有针对性地选择算法解决问题。

题目来源于《剑指Offer》,自己在原有基础上稍作批注和修改。

问题:为类型添加赋值运算符函数,可以把CMyString实例赋值给另一个实例、自身和连续赋值。

学习点:考虑问题充分,自己不会把赋值情况、内存泄漏考虑到这么细致。

#include<cstring>
#include<cstdio> class CMyString
{
public:
CMyString(char * pData = nullptr);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator=(const CMyString& str);
void Print(); private:
char* m_pData; //类比C风格字符串
}; CMyString::CMyString(char * pData)
{
if (pData==nullptr) //空指针
{
//创建空字符串
m_pData = new char[];
m_pData[] = '\0';
}
else
{
int length = strlen(pData);
m_pData = new char[length + ];
//复制
/*
char * strcpy(char * destination, const char * source);
Copies the C string pointed by source into the array pointed by destination, including the terminating null character(and stopping at that point).
*/
strcpy(m_pData, pData);
}
} CMyString::CMyString(const CMyString& str)
{
int length = strlen(str.m_pData); //Returns the length of the C string str. The length of a C string is determined by the terminating null - character
m_pData = new char[length + ]; //new分配内存后,默认使用delete释放对象
strcpy(m_pData, str.m_pData);
} CMyString::~CMyString(void)
{
delete[] m_pData;
} //1. 返回值的类型声明为该类型的引用,程序结束前返回实例自身的引用(*this)
//2. 传入的参数的类型声明为常量引用
//3. 释放实例自身的内存
//4. 判断传入的参数和当前的实例是不是同一个实例
//5. 升级:考虑异常安全性的解法 先new再delete
CMyString& CMyString::operator=(const CMyString& str) //参考2
{
if (this != &str) //参考4
{
CMyString strTemp(str); //临时实例
//参考3
char* pTemp = strTemp.m_pData;
strTemp.m_pData= m_pData;
m_pData = pTemp;
}//调用strTemp的析构函数,释放其内存
//参考1
return *this;
} //================= 测试代码 ==================
void CMyString::Print()
{
printf("%s", m_pData);
} void Test1()
{
printf("Test1 begins:\n"); char* text = "Hello world"; CMyString str1(text);
CMyString str2;
str2 = str1; printf("The expected result is: %s.\n", text); printf("The actual result is: ");
str2.Print();
printf(".\n");
} // 赋值给自己
void Test2()
{
printf("Test2 begins:\n"); char* text = "Hello world"; CMyString str1(text);
str1 = str1; printf("The expected result is: %s.\n", text); printf("The actual result is: ");
str1.Print();
printf(".\n");
} // 连续赋值
void Test3()
{
printf("Test3 begins:\n"); char* text = "Hello world"; CMyString str1(text);
CMyString str2, str3;
str3 = str2 = str1; printf("The expected result is: %s.\n", text); printf("The actual result is: ");
str2.Print();
printf(".\n"); printf("The expected result is: %s.\n", text); printf("The actual result is: ");
str3.Print();
printf(".\n");
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
getchar(); //等待输入
return ;
}

赋值运算符函数__from <剑指Offer>的更多相关文章

  1. 【剑指offer】包括min函数的栈

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26064213 剑指offer上的第21题,之前在Cracking the Coding i ...

  2. 剑指Offer——常用SQL语句、存储过程和函数

    剑指Offer--常用SQL语句.存储过程和函数 常用SQL语句 1.在MySQL数据库建立多对多的数据表关系 2.授权.取消授权 grant.revoke grant select, insert, ...

  3. 【Java】 剑指offer(30) 包含min函数的栈

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min ...

  4. 《剑指offer》 包含min函数的栈

    本题来自<剑指offer> 包含min函数的栈 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路: 举例子让抽象问题具体 ...

  5. 剑指offer(20)包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 题目分析 首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的 ...

  6. 《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

    弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复. [题目] 剑指offer 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 直觉 ...

  7. 剑指Offer - 九度1522 - 包含min函数的栈

    剑指Offer - 九度1522 - 包含min函数的栈2013-12-01 23:44 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测 ...

  8. 剑指Offer(二十):包含min函数的栈

    剑指Offer(二十):包含min函数的栈 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/ba ...

  9. Go语言实现:【剑指offer】包含min函数的栈

    该题目来源于牛客网<剑指offer>专题. 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数. 时间复杂度应为O(1). Go语言实现: var myList = ...

随机推荐

  1. [转载] sublime text 2 调试python时结果空白

    之前用的时候都一切正常,今天突然就出现了这个问题.按ctrl+b执行的时候结果只有空白,查了很多文章都只提到了中文路径.系统路径等等,没有解决问题,直到看到了这篇文章:http://384444165 ...

  2. 201521123054 《Java程序设计》第9周学习总结

    1. 本周学习总结 2. 书面作业 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 经常会出现ArrayIndexO ...

  3. linux文件截取前几行,后几行,中间几行命令

    1. 如果你只想看文件的前5行,可以使用head命令,如: head -5 /etc/passwd 2. 如果你想查看文件的后10行,可以使用tail命令,如: tail -2 /etc/passwd ...

  4. Mybatis第六篇【配置文件和映射文件再解读、占位符、主键生成与获取、Mapper代理】

    配置文件和映射文件再解读 映射文件 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为MappedStatement对象,mapper.xml以statement为单位管理 ...

  5. PolarDB · 新品介绍 · 深入了解阿里云新一代产品 PolarDB

    背景意义 云计算为如今的互联网时代提供了更多的计算能力,乃至创造能力,关系型数据库作为所有应用不可或缺的重要部件,开箱即用,高性价加比特性的云数据库深受开发者的喜爱.作为一线的开发和运维人员,在阿里云 ...

  6. python django 使用 haystack:全文检索的框架

    haystack:全文检索的框架whoosh:纯Python编写的全文搜索引擎jieba:一款免费的中文分词包 首先安装这三个包 pip install django-haystackpip inst ...

  7. 协议端口号(protocol port number)

    协议端口号(protocol port number) 先来个注意事项 (-> ->) 这种在协议层间的抽象的协议端口是软件端口,和硬件端口是完全不同的概念.硬件端口是不同设备进行交互的接 ...

  8. notepad的快捷操作-代码速写

    (一)先安装zencode插件 (二)运用插件 第一步:键入:html:xt 再Ctrl+Alt+Enter键 得到 <!DOCTYPE html PUBLIC "-//W3C//DT ...

  9. MXNet--DMLC-Core代码解读与宏

    MXNet--DMLC-Core代码解读与宏 dmlc-core是Distributed (Deep) Machine Learning Community的一个基础模块,这个模块用被应用到了mxne ...

  10. HTML5基础知识及相关笔记

    HTML5基础 1.1HTML文件的基本结构和W3C标准 1.1.1HTML简介 HTML是一种描述网页的语言,一种超文本标记的语言! 1.1.2HTML文件的基本结构 头部(head) 头部是网页的 ...