//重载赋值运算符

#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. sublime text3搭建react native

    Sublime Text 3 搭建React.js开发环境 Sublime有很强的自定义功能,插件库很庞大,针对新语言插件更新很快,配合使用可以快速搭建适配语言的开发环境. 1. babel-subl ...

  2. shell基础:1.0概述

    解释型.不用编译. 主要有两个工能:1.命令解释器 2.编程

  3. C语言标准函数源代码

    http://ftp.gnu.org/gnu/glibc/ 最新glibc-2.27.tar.gz 直接解压就可以

  4. MySQL个人学习笔记

    目录: 数据库的基本操作 创建.删除用户及授权 数据库字符校对集 创建.删除数据库和表 DML操作 DDL操作 索引 事务 一.数据库的基本操作 -- 选择要操作的数据库 -- world:数据库名 ...

  5. ATG精准科技-前端面试题

    1.请写出以下结果 for(var i=0; i<10; i++){ setTimeout(function () { console.log(i) },10) } 结果:打印10次190解析: ...

  6. ide vscode安装

    在linux系统中安装VSCode(Visual Studio Code)   在linux系统中安装VSCode(Visual Studio Code) 1.从官网下载压缩包(话说下载下来解压就直接 ...

  7. jq table页二级联动

    <div class="layerRtb layerRtb-threecolumn"> <div class="clearfix layerRtb-he ...

  8. 主成分分析(PCA)学习笔记

    这两天学习了吴恩达老师机器学习中的主成分分析法(Principal Component Analysis, PCA),PCA是一种常用的降维方法.这里对PCA算法做一个小笔记,并利用python完成对 ...

  9. Python: 字典列表: itemgetter 函数: 根据某个或某几个字典字段来排序列表

    问题:根据某个或某几个字典字段来排序Python列表 answer: 通过使用operator 模块的itemgetter 函数,可以非常容易的排序这样的数据结构 eg: rows = [ {'fna ...

  10. Linux基础命令---dump

    dump 检查ext2/3/4文件系统,确定哪些文件需要备份,这些需要备份的文件将会被复制到指定的磁盘或者其他存储介质.dump检查Ext 2/3/4文件系统上的文件,并确定哪些文件需要备份.这些文件 ...