赋值运算符函数__from <剑指Offer>
前段时间忙于项目,难得偷得几日闲,为即将到来的就业季做准备。在面试时,应聘者要注意多和考官交流,只有具备良好的沟通能力,才能充分了解面试官的需求,从而有针对性地选择算法解决问题。
题目来源于《剑指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>的更多相关文章
- 【剑指offer】包括min函数的栈
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26064213 剑指offer上的第21题,之前在Cracking the Coding i ...
- 剑指Offer——常用SQL语句、存储过程和函数
剑指Offer--常用SQL语句.存储过程和函数 常用SQL语句 1.在MySQL数据库建立多对多的数据表关系 2.授权.取消授权 grant.revoke grant select, insert, ...
- 【Java】 剑指offer(30) 包含min函数的栈
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min ...
- 《剑指offer》 包含min函数的栈
本题来自<剑指offer> 包含min函数的栈 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路: 举例子让抽象问题具体 ...
- 剑指offer(20)包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 题目分析 首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的 ...
- 《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复. [题目] 剑指offer 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 直觉 ...
- 剑指Offer - 九度1522 - 包含min函数的栈
剑指Offer - 九度1522 - 包含min函数的栈2013-12-01 23:44 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测 ...
- 剑指Offer(二十):包含min函数的栈
剑指Offer(二十):包含min函数的栈 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/ba ...
- Go语言实现:【剑指offer】包含min函数的栈
该题目来源于牛客网<剑指offer>专题. 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数. 时间复杂度应为O(1). Go语言实现: var myList = ...
随机推荐
- Python[小甲鱼007了不起的分支和循环]
加载背景音乐播放背景音乐(设置单曲循环)我方飞机诞生interval = 0while True:if 用户是否点击关闭按钮退出程序breakinterval += 1if interval = 50 ...
- Java课设 彩票购买抽奖程序 个人博客
一.团队课程设计博客链接 http://www.cnblogs.com/lyq063/p/7072507.html 二.自己的代码提交记录截图 三.自己负责模块或任务详细说明 用户注册信息的存储和登录 ...
- 201521123073 《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
- 201521123038 《Java程序设计》 第十二周学习总结
201521123038 <Java程序设计> 第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student ...
- 201521123053《Java程序设计》第十周学习总结
---恢复内容开始--- 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 在java多线程程序中,所有线程都不允许抛出未捕获的checked excepti ...
- 201521123110 《Java程序设计》第1周学习总结
第一周学习总结 本周开始了对java的初次学习接触,Java是一门新的编程语言不同于C,由于有了c的基础,对于Java的理解和学习也相对从前学C更容易些. 也学习了Java的诞生发展以及运用包括JVN ...
- java-annotation的简单介绍
package com.yangwei.shop.entity; /** * annotation作用 一是进行标识,二是进行约束 * *///必须让它在运行时能够执行@Retention(Reten ...
- Https系列之一:https的简单介绍及SSL证书的生成
Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...
- HADOOP源码分析之RPC(1)
源码位于Hadoop-common ipc包下 abstract class Server 构造Server protected Server(String bindAddress, int port ...
- C语言编程练习(一)
问题一: 问题描述:输入n个数,n<=100,找到其中最小的数和最大的数 输入样例: 4 1 2 3 4 输出样例:14 #include " ...