博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指offer》第一题(重载赋值运算符)
阅读量:4652 次
发布时间:2019-06-09

本文共 1608 字,大约阅读时间需要 5 分钟。

//重载赋值运算符#include 
#include
using namespace std;class CMystring{private: char* m_pData;//私有变量m_pDatapublic: CMystring(const char* pData = NULL)//具有默认参数的 含参构造函数,注意此处的const { if (pData != NULL)//注意判断是否是空字符串 { m_pData = new char[strlen(pData) + 1]; 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) + 1]; 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) + 1]; 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");}

 

转载于:https://www.cnblogs.com/CJT-blog/p/10458442.html

你可能感兴趣的文章
time模块
查看>>
Oracle Scheduler - Job and Argument
查看>>
同时update多张表的语句 -- 梦中的面试
查看>>
STM32f103C8T6 Bootloader设计(转)
查看>>
超声波测距温度补偿
查看>>
mysql级联删除
查看>>
面向对象(上)
查看>>
EFCodeFirst安装失败 解决规划
查看>>
各种域名解析的区别
查看>>
centos6.4搭建apache+mysql+php环境 ...
查看>>
Linux下安装和运行Wireshark
查看>>
python iter()的使用 迭代器 生成器的使用
查看>>
八数码块
查看>>
课后作业4
查看>>
VS11将拥有更好的单元测试工具和Fakes框架
查看>>
Linux Kernel 3.8.1 发布
查看>>
MFC程序出现“Debug Assertion Failed! File:dlgdata.cpp Line: 43 ”错误
查看>>
【并发】2、AtomicReferenceFieldUpdater初体验
查看>>
NOIP幂次方
查看>>
liferay MVCActionCommand的用法及例子
查看>>