#include <iostream>
#include <cstring>
using namespace std; class CString {
private:
char* m_pdata;
public:
CString(const char* ptr = nullptr) {
if (ptr == nullptr) m_pdata = nullptr;
m_pdata = new char[strlen(ptr) + ];
strcpy(m_pdata, ptr);
}
CString(const CString& a) {
if (a.m_pdata == nullptr) this->m_pdata = nullptr;
this->m_pdata = new char[strlen(a.m_pdata) + ];
strcpy(this->m_pdata, a.m_pdata);
} CString(CString&& a){
this->m_pdata = a.m_pdata;
a.m_pdata = nullptr;
} ~CString() {
if (this->m_pdata){
delete[] this->m_pdata;
}
} CString& operator=(const CString& a) {
if (this == &a)
return *this; if (this->m_pdata)
delete[] this->m_pdata;
this->m_pdata = new char[strlen(a.m_pdata) + ];
strcpy(this->m_pdata, a.m_pdata);
return *this;
} CString operator+=(const CString& a) {
if (a.m_pdata == nullptr) {
return *this;
} else if (this->m_pdata == nullptr) {
return a;
} else {
char* tmp = this->m_pdata;
this->m_pdata = new char[strlen(this->m_pdata) + strlen(a.m_pdata)
+ ];
strcpy(this->m_pdata, tmp);
strcat(this->m_pdata, a.m_pdata);
delete[] tmp;
return *this;
}
} friend CString operator+(const CString& a, const CString& b) {
char* res = new char[strlen(a.m_pdata) + strlen(b.m_pdata) + ];
strcpy(res, a.m_pdata);
strcat(res, b.m_pdata);
CString cs(res);
delete[] res;
return cs;
} friend ostream& operator<<(ostream& os, const CString& a) {
os << a.m_pdata;
return os;
}
}; int main() { CString a("abc");
CString b(a);
a = b;
a += b;
CString c = a + b;
std::cout << c << std::endl;
std::cout << a << std::endl; return ;
}

面试:C++String类实现的更多相关文章

  1. C++面试中string类的一种正确写法

    C++ 的一个常见面试题是让你实现一个 String 类,限于时间,不可能要求具备 std::string 的功能,但至少要求能正确管理资源.具体来说: 能像 int 类型那样定义变量,并且支持赋值. ...

  2. C++面试中string类的一种正确简明的写法

    本文首发于酷壳网 http://coolshell.cn/articles/10478.html 先说说程序员(应届生)面试的一般过程,一轮面试(面对一到两个面试官)一般是四.五十分钟,面试官会问两三 ...

  3. Java面试炼金系列 (1) | 关于String类的常见面试题剖析

    Java面试炼金系列 (1) | 关于String类的常见面试题剖析 文章以及源代码已被收录到:https://github.com/mio4/Java-Gold 0x0 基础知识 1. '==' 运 ...

  4. String类为什么要用final修饰(面试回答)

    String是所有语言中最常用的一个类.我们知道在Java中,String是不可变的.final的.Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类 ...

  5. C++ string类的实现

    c++中string类的实现 今天面试被考到了, 全给忘记了!!!   //string类的实现 #include <iostream> #include <string.h> ...

  6. java中String类、StringBuilder类和StringBuffer类详解

    本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html  版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...

  7. C#中 StringBuilder类 与 String类的区别---(转)

      在找工作的时候,去了些公司,避免不了要面试和笔试.不过一般最起初的是笔试.我印象中有这样有一道题目:StringBuilder类与 String类的区别?那时候我不太清楚这两个类的区别,今天在看代 ...

  8. String 类 Copy-On-Write 技术以及使用时存在的风险

    先来看一下string 面试时的简易写法(使用的是深拷贝): class String { String() :str(]) { str[] = '\0'; } String(char* p, siz ...

  9. c++在string类源

    一:回想 (1)c++中的string类是在面试中和笔试中常常考的题目: project代码免费下载 string类的自行实现 (2)c++中的string类和fstream类合起来是处理外部数据的利 ...

  10. String类的indexOf方法的用法和举例

    2017年3月3号博主第一次去郑州互联网公司面试,背景是这样的我先前去了农大龙子湖校园招聘投简历,然后第二天去面试了那经历可以说是很失败的一次面试,当然这跟自己的水平有关了接下来重点讲一下面试的题目: ...

随机推荐

  1. android textview支持多种格式跳转

    http://www.linuxidc.com/Linux/2011-08/40530p2.htm 1.android:autoLink属性,使TextView中链接手机号码/网页/邮件/地图 and ...

  2. Codeforces791A Bear and Big Brother

    A. Bear and Big Brother time limit per test 1 second memory limit per test 256 megabytes input stand ...

  3. 计算几何---凸包问题(Graham/Andrew Scan )

    概念 凸包(Convex Hull)是一个计算几何(图形学)中的概念.用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有点的.严谨的定义和相关概念参 ...

  4. JAVA本地读取文件,解决中文乱码问题

    JAVA本地读取文件出现中文乱码,查阅一个大神的博客做一下记录 import java.io.BufferedInputStream;import java.io.BufferedReader;imp ...

  5. Codeforces Beta Round #27 E. Number With The Given Amount Of Divisors 含n个约数最小数

    http://codeforces.com/problemset/problem/27/E RT,求含n个约数的最小的数 我们设答案p = 2^t1 * 3^t2 * -- * p^tk(其中p是第k ...

  6. 简单创建一个“嗨新房”的mac客户端

    下载地址:https://github.com/mapanguan/Mac_HiNewHouse                

  7. 16位CRC校验_Delphi

    unit Modbus_main; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, G ...

  8. CxGrid鼠标移到更改颜色

    CxGrid鼠标移到更改颜色 设置表单中TcxGrid1DBTableView的Styles属性,设置Selection procedure TForm1.cxGrid1DBTableView1Mou ...

  9. 应该知道的Linux技巧【转】

    这篇文章来源于Quroa的一个问答<What are some time-saving tips that every Linux user should know?>—— Linux用户 ...

  10. 使用PerfView监测.NET程序性能(三):分组

    在上一篇博客中,我们通过Perfview帮助文件中自带的代码来简单使用了Perfview,了解了基本操作.现在来看看Perfview中的分组操作(Grouping).分组功能都旨将记录到的各种函数调用 ...