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

题目来源于《剑指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[1];m_pData[0] = '\0';}else{int length = strlen(pData);m_pData = new char[length + 1];//复制/*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 - characterm_pData = new char[length + 1];  //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);  //临时实例//参考3char* pTemp = strTemp.m_pData;strTemp.m_pData= m_pData;m_pData = pTemp;}//调用strTemp的析构函数,释放其内存//参考1return *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 0;
}

转载于:https://www.cnblogs.com/DHUtoBUAA/p/7212421.html

赋值运算符函数__from 剑指Offer相关推荐

  1. 【剑指offer】【leetcode精选题集】【Java】剑指offer题解合集 更新中

    Leetcode题集 [剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet] [剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组] [剑指offe ...

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

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

  3. 剑指offer:包含min函数的栈 python实现

    题目 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路 暴力做法: 遍历一遍,找最小的数,然后返回. # -*- coding ...

  4. 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java

    <LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...

  5. 【LeetCode】剑指 Offer 30. 包含min函数的栈

    [LeetCode]剑指 Offer 30. 包含min函数的栈 文章目录 [LeetCode]剑指 Offer 30. 包含min函数的栈 一.辅助栈 一.辅助栈 解题思路: 普通栈的 push() ...

  6. 剑指offer——面试题21:包含min函数的栈

    剑指offer--面试题21:包含min函数的栈 Solution1: 辅助栈! 逻辑上要想清楚..但是用栈结构来实现栈,目的不知为何... class Solution { public:void ...

  7. LeetCode剑指offer算法备战春招-包含min函数的栈

    剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例 ...

  8. 剑指offer系列-30.包含min函数的栈

    剑指offer系列第30题.包含min函数的栈 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中, 调用 min.push 及 pop 的时间复杂度都是 ...

  9. 《剑指offer》Partition函数及其Partition函数周边

      Partion函数最早出现于快速排序算法,但其代表的分治思想,在<剑指offer>这本书中求数组中位数(面试题39,数组中出现次数超过一半的数字)中也有所涉及,将其汇总在一起,称之为P ...

最新文章

  1. 如何理解 Graph Convolutional Network(GCN)?
  2. IT公司刻板印象合集:程序员都秃头,商务个个是人精
  3. 曲线相似度衡量——曲线距离计算Fréchet distance详解与python计算
  4. 《jQuery UI 开发指南》——2.3 tabs ()方法
  5. 360浏览器清除缓存_放飞浏览器的反应速度
  6. 思科GNS3和华为eNSP完美结合
  7. 后台代码调用Application Resources
  8. 全国计算机二级个考生自定义,全国计算机二级考试《C++》强化试题及答案
  9. Js中字符串转Json与Json对象转字符串
  10. 第九届蓝桥杯单片机省赛题‘彩灯控制器’程序实现
  11. excel分段函数c语言,实战:Excel 逻辑分段函数应用
  12. python买水果题_Python练习题4.9查询水果价格
  13. 这5个是不是元宇宙游戏遗珠?
  14. Supermap Iserver 安装指南
  15. 白盒测试--数据流测试
  16. 家族关系查询系统程序设计算法思路_大数据结构课程设计(家族关系查询系统)要点...
  17. 【ChatGPT机器人】打造你的私人聊天助手
  18. 当百度也来玩众筹,是否可以为众筹正名?
  19. 关爱青少年作品,灯塔
  20. lqc_SSH配置与使用

热门文章

  1. Git Stash的使用方法与注意事项
  2. Android开发笔记(一百零六)支付缴费SDK
  3. Android开发笔记(四十八)Thread类实现多线程
  4. qt 发送数据到http
  5. 你能理解、不能理解和不需要理解的量子计算
  6. Cabin, 手机端的Kubernetes管理app
  7. MTK DRM常见问题介绍
  8. Node.js使用supervisor遭遇‘supervisor’不是内部或外部命令,如果解决?
  9. java中写sql语句的小小细节
  10. 当你打开网页的时候,世界都发生了什么(1)