实现简洁版的string类

#include<iostream>
using namespce std;
class String
{
public:
String()
:_str(new char[1])
{
_str=‘\0‘;
}
String(const char* str)//一个字符串的拷贝
:_str(new char[strlen(str)+1]
{
strcpy(_str,str);
}
String (const String&str)//一个对象的拷贝
:_str(NULL)
{
String tmp=str._str;//调用了拷贝构造函数生成了一个String类的对象
swap(_str,tmp._str);
}
/*String (const String&str)//一个对象的拷贝
:_str(new char[strlen(str._str)+1)
{
strcpy(_str,str._str);
}*/
String &operator=(String str)//直接调用拷贝构造函数生成str
{
swap(_str,str._str);
return *this;
}
/*String &operator=(const String &str)//书上常用的方法
{
if(this==&str)
{
return *this;
}
delete _str;
_str=NULL;
_str=new char[strlen(str._str)+1];
strcpy(_str,str._str);
return *this;
}*/
private:
char*_str;
};

以上方法是最简单实现string类的方法,也有其它的方法!

时间: 2024-10-13 07:18:12

实现简洁版的string类的相关文章

1——自我实现一个简洁版的String类

在C++中有C没有的string字符串类型,string类型的数据其实是一个指向字符串首地址的指针变量,因此在string类的默认成员函数拷贝构造和赋值运算符的重载就会涉及到深浅拷贝的问题,一不小心要么就是内存泄露要么就是多次释放同一块空间导致程序崩溃,下面就来模拟实现一个简洁版的String类: 既然是指向一个字符串的指针,因此类的成员变量就需要有一个char*类型的指针: #include <iostream> #include <string.h> using namespa

实现一个简洁版的String类

浅拷贝: 深拷贝: 注意事项:在浅拷贝中复制构造必须构造一个匿名对象在进行交换,在赋值操作符中传参时不能使用引用.

实现以一个简洁版的string类

浅拷贝: 分析:如果在赋值运算时不使用引用会造成程序崩溃,在调用复制构造时是s1的_str会出现一个随机值,本来应该是被析构过的应为空,所以在测试时出了作用域再去析构时就会出现错误.

自己动手写Java String类

很早想造个轮子了,听说不想造轮子的程序员不是好程序员,用惯了Apache的众多开源项目,却没看过开源一句代码.最近看了几篇卖焦虑的文章之后,突然变得慌张起来,于是在百忙之中难得一点闲第一次打开了JDK的源码包.初读:晦涩难懂,3千多行代码,全英文注释,有一些陌生的语法和调用陌生的类足矣吓退一个中年程序员.再度:只读个轮廓,这String.class也就是注释写的全写得多,核心代码不多嘛!三读:哇喔,整个String类核心变量就一个char[]数组嘛: private final char val

C++ Primer Plus 第六版 第16章 string类和标准模板库

1.string实际上是模板具体化basic_string<char> 的一个typedef,有默认参数,所以省略了初始化参数 2.size_type是一个依赖于实现的整形 string将string::npos定义为字符串的最大长度 3.string类的构造函数P656 4.对于c-风格字符串,3种输入方法:cin>>   cin.getline(),cin.get 对于string   ,2种输入方法:cin>>,getline(cin,string对象) 5.st

【C++】实现一个简洁版的class String

//实现一个简洁版的class String #include <iostream> #include <string.h> using namespace std; class String { public: String() { _str = new char[1]; _str[0] = '\0'; } String(const char *str) { _str = new char[strlen(str) + 1]; strcpy(_str, str); } String

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

C++ 的一个常见面试题是让你实现一个 String 类,限于时间,不可能要求具备 std::string 的功能,但至少要求能正确管理资源.具体来说: 能像 int 类型那样定义变量,并且支持赋值.复制. 能用作函数的参数类型及返回类型. 能用作标准库容器的元素类型,即 vector/list/deque 的 value_type.(用作 std::map 的 key_type 是更进一步的要求,本文从略). 换言之,你的 String 能让以下代码编译运行通过,并且没有内存方面的错误. vo

【C语言】【面试题】C++中String类浅拷贝,深拷贝的传统写法与现代写法

C++ 的一个常见面试题是让你实现一个 String 类,在这我把String类的各种写法写了一下 1.浅拷贝 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; //1.浅拷贝 class String { public:     String(char* str)         :_str(str)     {}     String(const String& s)         

C++ Primer 学习笔记_27_操作符重载与转换(2)--++/--运算符重载、!运算符重载、赋值运算符重载 、String类([]、 +、 += 运算符重载)、&gt;&gt;和&lt;&lt;运算符重载

C++ Primer 学习笔记_27_操作符重载与转换(2)--++/--运算符重载.!运算符重载.赋值运算符重载 .String类([]. +. += 运算符重载).>>和<<运算符重载 一.++/--运算符重载 1.前置++运算符重载 成员函数的方式重载,原型为: 函数类型 & operator++(); 友元函数的方式重载,原型为: friend 函数类型 & operator++(类类型 &); 2.后置++运算符重载 成员函数的方式重载,原型为: