String类的具体实现

string的内容其实就是C中的字符串,在C中是char*型,在C++中是string类型。

//C
char *str = "mengziyue";
//C++
string str = "mengziyue";
string str("mengziyue");

String类的简单实现

#include<iostream>
#include<string.h> using namespace std; class String{ //String的定义
public:
String(const char *str=NULL); //构造
String(const String& Str); //复制构造
String& operator = (const String& S); //运算符重载
PrintString();
~String();
char *m_data;
}; String::String(const char *str){ //判断初始化构造函数的字符串是否为空
if(str == NULL){
m_data = new char[1];
m_data[0] = '\0';
}
else{
m_data = new char[strlen(str)+1];
strcpy(this->m_data,str);
}
} String::String(const String& Str){ //复制构造函数,无需判断
m_data = new char[strlen(Str.m_data)+1];
strcpy(this->m_data,Str.m_data);
} String& String::operator = (const String& S){ //运算符重载,先判断两串是否相等
if(S.m_data == this->m_data){ //若相等则直接返回this指针
return *this;
}
else{ //若不等则需要先删除原先开辟的内存,再重新分配
delete []m_data; //这是为了防止被赋值的串的大小与赋值串的大小不同
m_data = new char[strlen(S.m_data)+1]; //而导致拷贝串时发生错误
strcpy(this->m_data,S.m_data);
}
}
String::~String(){ //释放内存时需要将原指针指向空,避免成为野指针
delete []m_data;
m_data = NULL;
}
String::PrintString(){
cout<<this->m_data<<endl;
}
int main(){
String S("dafagag");
S.PrintString();
String S2;
S2 = S;
S2.PrintString();
return 0;
}

参考链接:

  1. C++中string的实现原理

C++面试常见问题——03String类的实现的更多相关文章

  1. C++面试常见问题——17类模板的使用

    类模板的使用 注意在每次类模板函数时都需要声明一个类模板 #include<iostream> using namespace std; template <class T,int ...

  2. 2019最新最全Java开发面试常见问题答案总结

    2019最新最全Java开发面试常见问题答案总结 马上准备9月份出去面试Java开发,自己学习丢西瓜捡芝麻,学了的都忘了,所以有机会自己做个学习笔记,摘录自各个博文以及总结. 1.JAVA面向对象的特 ...

  3. MySQL索引知识点&面试常见问题

    来源:BiggerBoy 作者:北哥 原文链接:https://mp.weixin.qq.com/s/fucHvdRK5wRrDfBOo6IBGw 大家好我是北哥,今天整理了MySQL索引相关的知识点 ...

  4. 上海市2019年公务员录用考试第一轮首批面试名单(B类)

    上海市2019年公务员录用考试第一轮首批面试名单(B类) 2019-03-12 设置字体:大 中 小 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 1910565 5 ...

  5. 上海市2019年公务员录用考试第一轮首批面试名单(A类)

    上海市2019年公务员录用考试第一轮首批面试名单(A类) 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 4016574 127.4 5112479 145.9 5125732 ...

  6. Java后台面试 常见问题

    Java后台面试 常见问题   从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米.百度.阿里.京东.新浪.CVTE.乐视家的研发岗offer.我找的是java后台开发,把常见的问题分享 ...

  7. C++面试常见问题——01预处理与宏定义

    C++面试常见问题--------01预编译和宏的使用 C++预处理器 预处理器是一些指令,它将指示编译器在实际编译之前需要完成的预处理.预处理必须要在对程序进行词法与语义分析.代码生成与优化等通常的 ...

  8. C++面试常见问题——10派生类的构造与析构

    派生类的构造与析构 派生类的构造 派生时构造函数与析构函数不会被继承,需要重新定义派生类的构造函数与析构函数.派生类对象包含了基类对象的值,创建派生类时首先会调用基类的构造函数,若派生类中含有其它类对 ...

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

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

随机推荐

  1. Spring_MVC 21问

    1.什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,C ...

  2. px(像素)、pt(点)、ppi、dpi、dp、sp之间的关系

    px:pixel,像素,电子屏幕上组成一幅图画或照片的最基本单元 pt:point,点,印刷行业常用单位,等于1/72英寸 ppi:pixel per inch,每英寸像素数,该值越高,则屏幕越细腻 ...

  3. 设计模式课程 设计模式精讲 16-2,3 代理模式Coding-静态代理-1

    1 代码演练 1.1 代码演练1(静态代理之分库操作) 1 代码演练 1.1 代码演练1(静态代理之分库操作) 需求: 订单管理,模拟前置后置方法,模拟分库管理 重点: 重点看订单静态代理,动态数据源 ...

  4. Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)

    日期:2020.01.16 博客期:125 星期四 我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式: <?xml version=&quo ...

  5. 如何在django-filter中用choice field 的 value 值过滤对象

    如果我们有这样一个model: class IPInfoModel(models.Model): TYPE_INTRANET = 1 TYPE_INTERNET = 2 IP_TYPES = ( (T ...

  6. Interlocked.Increment()函数详解 (转载)

    原文地址 class Program { static object lockObj = new object(); ; ; //假设要处理的数据源 , ).ToList(); static void ...

  7. Numpy 为运算

    Numpy “bitwise_” 开头的函数是位运算函数: Numpy 位运算包括以下几个函数: 函数 描述  bitwise_and  对数组元素执行位与操作  bitwise_or 对数组元素执行 ...

  8. ElasticSearch 表结构信息 提取

    参考: es-sql: https://github.com/NLPchina/elasticsearch-sql/releases 执行SQL语句SearchDao org.nlpcn.es4sql ...

  9. Linux设备树学习

    1.概念 设备树用于实现驱动代码与设备信息相分离.驱动代码只负责处理驱动的逻辑而关于设备的具体信息存放到设备树文件中.(dts文件,编译后为dtb文件).一个dts文件对应一个ARM的machine, ...

  10. Android:用代码修改一行文字中某几个字的颜色

    TextView changeVideoQualityTxt = (TextView) rootView.findViewById(R.id.enter_wireless_display_txt); ...