//重载赋值运算符

#include <iostream>
#include <cstring>
using namespace std; class CMystring
{
private:
char* m_pData;//私有变量m_pData public:
CMystring(const char* pData = NULL)//具有默认参数的 含参构造函数,注意此处的const
{
if (pData != NULL)//注意判断是否是空字符串
{
m_pData = new char[strlen(pData) + ];
strcpy(m_pData, pData);
}
else
m_pData = NULL;
} CMystring(const CMystring& str)//复制构造函数,注意此处一定是const class_type &,没这个引用是浅复制,容易内存爆炸
{
if (str.m_pData != NULL)
{
m_pData = new char[strlen(str.m_pData) + ];
strcpy(m_pData, str.m_pData);
}
else
m_pData = NULL;
} ~CMystring(void)//析构函数
{
delete[] m_pData;//一定释放内存,不然造成内存泄漏
} CMystring& operator= (const CMystring& str)//重载赋值运算符,此处一定要返回类型是引用,不然无法连续赋值,而且参数列表里要用常量引用
{
if ((this != &str) && (str.m_pData != NULL))//此处一定判断传入参数和实例是否是一个,不然一旦释放实例,传入参数也被释放了
{
if (m_pData != NULL)
delete[] m_pData;
m_pData = new char[strlen(str.m_pData) + ];
strcpy(m_pData, str.m_pData);
}
return *this;//必须返回自身引用,不然无法连续赋值
} void display()
{
if (m_pData != NULL)
{
cout << m_pData;
}
} }; int main()
{
CMystring str1;
CMystring str2("hi");
CMystring str3("hello");
str1 = str2;//测试用例一:实例A赋值实例B
str3 = str3;//测试用例二:实例自身赋值
str1 = str2 = str3;//测试用例三:实现连续赋值
str1.display();//这里测试案例写的不好,最好写成void子函数,然后函数内各种cout提示案例实现到哪一步了,这里我有点偷懒
system("pause");
}

《剑指offer》第一题(重载赋值运算符)的更多相关文章

  1. 剑指 offer 第一题: 二维数组中的查找

    打算写 图解剑指 offer 66 题 的系列文章,不知道大家有没有兴趣

  2. 剑指Offer编程题1——二维数组中的查找

    剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...

  3. 剑指Offer编程题2——替换空格

    剑指Offer编程题2——替换空格 题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happ ...

  4. 剑指offer编程题66道题 36-66

    36.两个链表的第一个公共节点 题目描述 输入两个链表,找出它们的第一个公共结点. 1.具有重合节点的两个链表是一个Y字性,用两个堆栈放这两个链表,从尾部开始遍历,直到遍历到最后一个重合节点. 这种算 ...

  5. 牛客网剑指offer刷题总结

    二维数组中的查找: 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 两 ...

  6. 剑指offer刷题(Tree)

    开篇 二刷剑指offer了,本来用Tyora记的笔记,发现字数到四万了就变得好卡o(╥﹏╥)o,刚好开始写博客,就转过来吧,记下来子自己看.不废话,开刷... JZ26. 树的子结构 输入两棵二叉树A ...

  7. LeetCode剑指Offer刷题总结(一)

    LeetCode过程中值得反思的细节 以下题号均指LeetCode剑指offer题库中的题号 本文章将每周定期更新,当内容达到10题左右时将会开下一节. 二维数组越界问题04 public stati ...

  8. 剑指offer刷题

    1.面试题43. 1-n整数中1出现的次数 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次 ...

  9. 剑指offer编程题Java实现——面试题6重建二叉树

    题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2, ...

  10. 剑指offer编程题Java实现——面试题12相关题大数的加法、减法、乘法问题的实现

    用字符串或者数组表示大数是一种很简单有效的表示方式.在打印1到最大的n为数的问题上采用的是使用数组表示大数的方式.在相关题实现任意两个整数的加法.减法.乘法的实现中,采用字符串对大数进行表示,不过在具 ...

随机推荐

  1. kendo column chart

     目录 1.用js操作chart, 2.tooltip template鼠标悬浮显示内容, 3.双坐标轴,axisCrossingValues: [0, 30],3指的是跨越横坐标轴标签项数,显示在右 ...

  2. kafka集群监控工具之三--kafka Offset Monitor

    1.介绍 一般情况下,功能简单的kafka项目  使用运维命令+kafka Offset Monitor 就足够用了. 2.使用2.1 部署 github下载jar包 KafkaOffsetMonit ...

  3. presto 0.166概述

    presto是什么 是Facebook开源的,完全基于内存的并⾏计算,分布式SQL交互式查询引擎 是一种Massively parallel processing (MPP)架构,多个节点管道式执⾏ ...

  4. Open-Falcon

    A Distributed and High-Performance Monitoring System Scalability Scalable monitoring system is neces ...

  5. Linux基础命令---hwclock

    hwclock   hwclock是一种访问硬件时钟的工具,可以显示当前时间,将硬件时钟设置为指定的时间,将硬件时钟设置为系统时间,以及从硬件时钟设置系统时间.您还可以定期运行hwlock以插入或删除 ...

  6. Linux中编写Bash脚本的10个技巧

    Shell 脚本编程 是你在 Linux 下学习或练习编程的最简单的方式.尤其对 系统管理员要处理着自动化任务,且要开发新的简单的实用程序或工具等(这里只是仅举几例)更是必备技能. 本文中,我们将分享 ...

  7. OpenCV-跟我一起学数字图像处理之拉普拉斯算子

    https://www.cnblogs.com/german-iris/p/4840647.html Laplace算子和Sobel算子一样,属于空间锐化滤波操作.起本质与前面的Spatial Fil ...

  8. Android项目开发三

    微博客户端开发 本周学习计划 运用OAuth相关知识,解决上周出现的微博验证问题. 看懂微博客户端登录.用户主页等功能代码. 将程序中存在的问题解决. 实际完成情况 本周继续研究了OAuth相关知识, ...

  9. 获取GetOpenFileName多选文件名

    void CWriteWnd::OpenFileDialog() { OPENFILENAME ofn; TCHAR szOpenFileNames[*MAX_PATH] = _T("&qu ...

  10. AP聚类算法

    一.算法简介 Affinity Propagation聚类算法简称AP,是一个在07年发表在Science上的聚类算法.它实际属于message-passing algorithms的一种.算法的基本 ...