赋值运算符函数__from 剑指Offer
前段时间忙于项目,难得偷得几日闲,为即将到来的就业季做准备。在面试时,应聘者要注意多和考官交流,只有具备良好的沟通能力,才能充分了解面试官的需求,从而有针对性地选择算法解决问题。
题目来源于《剑指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相关推荐
- 【剑指offer】【leetcode精选题集】【Java】剑指offer题解合集 更新中
Leetcode题集 [剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet] [剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组] [剑指offe ...
- 《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。...
弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复. [题目] 剑指offer 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 直觉 ...
- 剑指offer:包含min函数的栈 python实现
题目 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路 暴力做法: 遍历一遍,找最小的数,然后返回. # -*- coding ...
- 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java
<LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...
- 【LeetCode】剑指 Offer 30. 包含min函数的栈
[LeetCode]剑指 Offer 30. 包含min函数的栈 文章目录 [LeetCode]剑指 Offer 30. 包含min函数的栈 一.辅助栈 一.辅助栈 解题思路: 普通栈的 push() ...
- 剑指offer——面试题21:包含min函数的栈
剑指offer--面试题21:包含min函数的栈 Solution1: 辅助栈! 逻辑上要想清楚..但是用栈结构来实现栈,目的不知为何... class Solution { public:void ...
- LeetCode剑指offer算法备战春招-包含min函数的栈
剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例 ...
- 剑指offer系列-30.包含min函数的栈
剑指offer系列第30题.包含min函数的栈 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中, 调用 min.push 及 pop 的时间复杂度都是 ...
- 《剑指offer》Partition函数及其Partition函数周边
Partion函数最早出现于快速排序算法,但其代表的分治思想,在<剑指offer>这本书中求数组中位数(面试题39,数组中出现次数超过一半的数字)中也有所涉及,将其汇总在一起,称之为P ...
最新文章
- 如何理解 Graph Convolutional Network(GCN)?
- IT公司刻板印象合集:程序员都秃头,商务个个是人精
- 曲线相似度衡量——曲线距离计算Fréchet distance详解与python计算
- 《jQuery UI 开发指南》——2.3 tabs ()方法
- 360浏览器清除缓存_放飞浏览器的反应速度
- 思科GNS3和华为eNSP完美结合
- 后台代码调用Application Resources
- 全国计算机二级个考生自定义,全国计算机二级考试《C++》强化试题及答案
- Js中字符串转Json与Json对象转字符串
- 第九届蓝桥杯单片机省赛题‘彩灯控制器’程序实现
- excel分段函数c语言,实战:Excel 逻辑分段函数应用
- python买水果题_Python练习题4.9查询水果价格
- 这5个是不是元宇宙游戏遗珠?
- Supermap Iserver 安装指南
- 白盒测试--数据流测试
- 家族关系查询系统程序设计算法思路_大数据结构课程设计(家族关系查询系统)要点...
- 【ChatGPT机器人】打造你的私人聊天助手
- 当百度也来玩众筹,是否可以为众筹正名?
- 关爱青少年作品,灯塔
- lqc_SSH配置与使用