剑指offer-0x01
来源:互联网 发布:python os.exit 编辑:程序博客网 时间:2024/05/17 02:19
赋值运算函数
对于定义一个赋值运算符函数时,需要注意一下几点:
函数的返回类型必须是一个引用,因为只有返回引用,才可以连续赋值
传入的参数声明为常量引用,可以提高代码效率,同时赋值运算函数内不会改变传入的实例状态
一定要记得释放实例自身已有的内存,否则程序容易出现内存泄露
注意传入的参数和当前的实例是不是同一个实例,如果是同一个,则不用进行赋值操作,直接返回即可
自己的代码 求鄙视
//main.h#ifndef MAIN_H_INCLUDED#define MAIN_H_INCLUDEDclass CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString & str); char* getStr(); ~CMyString(); CMyString& operator = (const CMyString &str);private: char* m_pdata;};#endif // MAIN_H_INCLUDED
//main.cpp#include <iostream>#include <cstring>#include "main.h"//must use "" not <>using namespace std;CMyString& CMyString::operator = (const CMyString &str){ if (this == &str) return *this;//if itself = itself then return directly //in case delete itself when delete delete []m_pdata; m_pdata = NULL; m_pdata = new char[strlen(str.m_pdata)+1]; strcpy(m_pdata,str.m_pdata); return *this;//return a value}char* CMyString::getStr(){ return m_pdata;}CMyString::CMyString(char* pData){ int length = strlen(pData); m_pdata = new char[length+1]; strcpy(m_pdata,pData);}CMyString::~CMyString(){ delete []m_pdata;}int main(){ CMyString str("i love china!"); CMyString str1; str1 = str; cout<<str1.getStr()<<endl; cout << "Hello world!" << endl; return 0;}E:\CodeBlocks\operator\main.h|14|error: 'char* CMyString::m_pdata' is private|
别人的代码
#include<iostream>#include<cstring>using namespace std;class CMyString{public: CMyString(char *pData=NULL); CMyString(CMyString &str); CMyString& operator=(CMyString &str); ~CMyString(void); void Print(){ cout << m_pData; }private: char* m_pData;};CMyString::CMyString(char *pData){ if (NULL == pData) { m_pData = NULL; return; } else { unsigned int len = strlen(pData)+1; m_pData = new char[len]; for (int i = 0; i < len; i++) m_pData[i] = pData[i]; m_pData[len] = '\0'; }}CMyString::CMyString(CMyString &str){ unsigned int len = strlen(str.m_pData) + 1; m_pData = new char[len]; for (int i = 0; i < len; i++) m_pData[i] = str.m_pData[i]; m_pData[len] = '\0';}CMyString & CMyString::operator=(CMyString &str){ if (this == &str) return *this; else { unsigned int len = strlen(str.m_pData) + 1; char *pTemp = new char[len]; for (int i = 0; i < len; i++) pTemp[i] = str.m_pData[i]; pTemp[len] = '\0'; delete[]m_pData;//出错!!!不解 m_pData = pTemp; } return *this;}CMyString::~CMyString(){ delete [] m_pData;}int main(){ char c1[10] = "majunfu"; CMyString s1(c1); CMyString s2 = s1; s1 = s2; s1.Print(); s2.Print(); return 0;}
0 0
- 剑指offer-0x01
- 0X01下一秒
- Rails 实战 0x01
- Test -> 0x01
- 逆向工程 0x01
- 0x01 什么是壳
- [7]复用类 0X01
- 程序员笑话0X01
- 关于汇编--0x01内存
- 关于C语言0x01
- 0x01虚函数分析
- 【J2SE归档总结】0x01 语句结构
- 【锋利的JQuery】0x01 认识JQuery
- iOS 使用0x01作为分隔符
- 从零开始,写一个搜索引擎 (0x01)
- 0x01 PE文件结构学习总结
- Java 学习笔记(0x01) 数据类型转换
- ModBus协议-功能码-0x01
- 序列号和设备标识UDID码手机直接获取方式
- 机器学习:贝叶斯总结_1:概述
- NGINX学习笔记——传递请求头
- OpenGL实践3之第一个着色器程序2
- Bayesian Inference01
- 剑指offer-0x01
- android 入门 二
- [BZOJ3211]花神游历各国
- 242. Valid Anagram | Java最短代码实现
- [BZOJ3038]上帝造题的七分钟2
- Bayesian Inference02
- 启用window Server 2008 Aero主题
- 引用作为函数返回值
- css判断不同分辨率显示不同宽度布局实现自适应宽度