JZ-C-01

剑指offer代码实现:基本照敲,顺便写写注释和疑问。

第一题:为CMyString类添加赋值运算符函数,代码如下:

 1 //============================================================================
 2 // Name        : JZ-C-01.cpp
 3 // Author      : Laughing
 4 // Version     :
 5 // Copyright   : Your copyright notice
 6 // Description : Hello World in C++, Ansi-style
 7 //============================================================================
 8 #include "stdafx.h"
 9 #include <string.h>
10 using namespace std;
11 /**
12  *剑指offer面试题1
13  */
14 class CMyString {
15 public:
16     CMyString(char* pData = NULL); //构造函数
17     CMyString(const CMyString &str); //类似复制构造函数?
18     ~CMyString(void);
19     void print(); //打印
20     CMyString& operator =(const CMyString &str); //赋值运算符重载:返回类型是该类型的引用,这样才可以允许连续赋值:"str=str1=str2"。const:因为在赋值运算符函数内不会改变传入的实例的状态
21 private:
22     char* m_pData;
23 };
24 CMyString::CMyString(char *pData) {
25     if (pData == NULL) { //若为空
26         m_pData = new char[1];
27         m_pData = ‘\0‘; //字符串默认最后一位补‘\0‘
28     } else {
29         int length = strlen(pData); //字符串长度
30         m_pData = new char[length + 1]; //为何+1?
31         strcpy(m_pData, pData); //复制
32     }
33 }
34 CMyString::CMyString(const CMyString &str) {
35     int length = strlen(str.m_pData);
36     m_pData = new char[length + 1];
37     strcpy(m_pData, str.m_pData);
38 }
39 CMyString::~CMyString() {
40     delete[] m_pData; //释放内存
41 }
42 void CMyString::print() {
43     cout << m_pData << endl;
44 }
45 CMyString& CMyString::operator =(const CMyString& str) { //自动生成,前面有inline,为什么?
46     if (this == &str) { //先判断传入的参数和当前实例是不是同一个实例★
47         return *this;
48     }
49     /*若没上面的if判断,若为同一个实例,一旦释放自身的内存,传入的参数的内存同样被释放*/
50     delete[] m_pData; //先释放内存
51     m_pData = NULL;
52     m_pData = new char[strlen(str.m_pData) + 1]; //重新分配空间
53     strcpy(m_pData, str.m_pData);
54     return *this; //返回实例自身的引用
55 }
56 int main() {
57     cout << "Hello World!!!" << endl; // prints Hello World!!!
58     char* str = "Hello World"; //有什么问题,和不加 const区别
59     CMyString test(str);
60     test.print();
61     CMyString test2, test3;
62     //test = test; //赋值给自己,此处以判断传入参数和当前实例相同时会不会出现问题
63     test3 = test2 = test; //利用赋值运算符为对象test2,test3赋值
64     test3.print();
65     return 0;
66 }
时间: 2024-08-09 20:21:24

JZ-C-01的相关文章

巢哑偕倥乇椭煞谙暗逞帕俸

IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Stack Overflow.Twitter.Reddit.IEEE Xplore.GitHub.CareerBuilder 等,对 48 种语言进行排行. 与其他排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果.考虑到典型的 Spectrum 读者需求

我喜欢减肥我们来减肥吧

http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313278016/2015.01.28.html http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313282016/2015.01.28.html http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313289016/2015.01.28.html http://www.ebay.com/cln/usli

百度回家看沙发沙发是减肥了卡斯加积分卡拉是减肥

http://www.ebay.com/cln/hpryu-caw8ke/cars/158056866019/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/158445650015/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/158445674015/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/1584456790

我国第三代移动通信研究开发进展-尤肖虎200106

众所周知,数据科学是这几年才火起来的概念,而应运而生的数据科学家(data scientist)明显缺乏清晰的录取标准和工作内容.此次课程以<星际争霸II>回放文件分析为例,集中在IBM Cloud相关数据分析服务的应用.面对星际游戏爱好者希望提升技能的要求,我们使用IBM Data Science Experience中的jJupyter Notebooks来实现数据的可视化以及对数据进行深度分析,并最终存储到IBM Cloudant中.这是个介绍+动手实践的教程,参会者不仅将和讲师一起在线

pl/sql学习1——标量变量psahnh6S

为类型.不能用于表列的数据类型.范围为的子类型.自然数.为的子类型.具有约束为单精度浮点数.为变量赋值时.后面要加为双精度浮点数.为变量赋值时.后面要加.为数字总位数.为小数位数是的子类型.最大精度位是的子类型.最大精度位单精度浮点型是的子类型.最大精度位双精度浮点型定义精度为位的实数..定义为位的整数.变长字符串.最长测试变量数据!.定长字符串.最长测试变长二进制字符串物理存储的为类型...固定长度.个字节使用定义数据类型那个最小值:最大值:最小值:最大值:最小值:最大值:最小值:最大值:最小

luogu P1141 01迷宫 x

P1141 01迷宫 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身). 输入输出格式 输入格式: 输入的第1行为两个正整数n,m. 下面n行,每行n个字符,字符只可能是0或者1,字符之间没有空格. 接下来m行,每行2个用空格分隔的正整数i,j,对应了迷宫中第i行第j列的一个格子,询问从这一格开始能移

[自制简单操作系统] 1、从0-1到汇编再到c语言的奥秘

目录: 1.用0-1编写最简单的操作系统 2.用汇编改写上面0-1程序 2.1 只用DB的汇编改写版  2.2 加入RESB汇编的改写版  2.3 进一步使用汇编替换0-1文件  2.4 核心程序也用汇编改写  2.5 向汇编程序中加入IPL(启动程序装载器)  2.6 从启动区执行操作系统(读盘的应用) 3.汇编和C语言混合开发 3.1 32位开发及C语言混合开发引入 3.2 汇编引入C语言(用汇编写C语言函数)  3.3 C语言实现内存写入  3.4 C语言指针的强大  3.5 色号设定与调

ODbgScript 2.01帮助文档

-------------------------------ODbgScript original pluginhttp://github.com/odbgscript------------------------------- 1. About OllyScript and ODbgScript2. Status 2.1 What's new?3. Documentation 3.1 Language 3.1.1 Reserved variables 3.1.2 Commands 3.2

$01背包详解$

前言:DP 快接触半年了. 还是想起来把曾经虐我的\(01背包\) 好好写写. \[ dp[i][j] \ = \ max(\ dp[i-1][j-w[i]] \ + \ c[i] \ , \ dp[i][j])\;\] \[ 这个方程熟悉吗qwq \] \[ 以及下面这个压维的.\] \[ dp[j] \ = \ max(\ dp[j-w[i]] \ + \ c[i] \ , \ dp[j])\;\] 本文不多占篇幅 例题就写在这里.(抄袭代码后果自负 下面借鉴此处 其中\(F[i-1][j]

Spring知识点回顾(01)

Spring知识点回顾(01) 一.依赖注入 1.声明Bean的注解 @Component @Service @Repository @Controller 2.注入Bean的注解 @Autowired @Inject @Resource 二.加载Bean 1.xml方式 - applicationcontext.xml : Beans, Bean, Component-Scan 2.注解方式 - @Configuration,@ComponentScan,@Bean 用@Configurati