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中Jsp也页面怎么会获取不到Controller中的数据

    ----------Controller ------- package com.test.mvc; import org.springframework.stereotype.Controller; ...

  2. [转]简单总结一下解决 添加 inline-block 后多出来的空隙

    添加 inline-block 后: 查询.借鉴的原网址:http://www.zhangxinxu.com/wordpress/?p=2357 html 结构: <ul class=" ...

  3. 解决在高分屏下开发winform界面变形

    Form.AutoScaleMode = AutoScaleMode.None; 需要在超大屏下显示的时候,再考虑 AutoScaleMode.Font; AutoScaleMode.Dpi;

  4. thymeleaf 在 html和js 中拼接字符串

    一.th:text字符串和事件拼接 <span th:text="'Welcome,'+${user.name}">  <span th:text="| ...

  5. java基础多线程

    线程的创建 方式1:继承Java.lang.Thread类,并覆盖run() 方法 package com.demo.Thread; public class ThreadDemo01 extends ...

  6. window和document的区别理解,bom和dom的区别理解

    Window对象: 是整个BOM的核心,所有对象和集合都以某种方式回接到window对象.Window对象表示整个浏览器窗口,但不必表示其中包含的内容. Document对象: 实际上是window对 ...

  7. 【C++】【STL】【map】基础知识干货

    1.map简介 map是一种关联式容器,主要用于对数据一对一的映射. 2.map的构造 (1)头文件:#include<map> (2)定义:map<第一关键字,第二关键字> ...

  8. Broadcast机制(二)

    内容提纲: 在本节课当中,我会继续为大家讲解Android的广播机制,重点内容有以下的两个方面: a)         在应用程序当中注册BroadcastReceiver的方法 b)         ...

  9. Vim学习1移动光标

    vim adventure上面做了大量练习,是个好软件只是需要收费 HJKLWBE 首先HJKL分别是移动上下左右的 H:光标左移 J:下移 K:上移 L:右移 W:跳转到下一个单词的第一个字,注意是 ...

  10. Link Analysis_1_Basic Elements

    1. Edge Attributes 1.1 Methods of category 1.1.1 Basic three categories in terms of number of layers ...