写一个简单String类
来源:互联网 发布:物业app软件取名 编辑:程序博客网 时间:2024/06/08 14:20
先列举一些会用到的知识点
- strcpy, strcat等字符串操作函数。
- new和delete对于内存的操作符。
- 对于类的基本概念,拷贝构造,成员运算符的重载。
对于这篇博客我只做简单的介绍。
关于strcpy函数。
函数原型char * strcpy(char *dest, char *src)
作用是将src所指向的内容拷贝到dest所指向的内存中。
需要注意的点
1. src是以NULL结束的字符串。
2. src 和dest所指向的内存不能重叠(具体原因可以去看strcpy的实现,简单的说就是,内存如果重叠可以会将NULL覆盖导致内存溢出。)
3. dest必须有足够的空间。
关于strcat函数
函数原型char* strcat(char *dest, char *src)
作用是将src所指向的内容连接到dest后。
dest和src都需以NULL结尾,且dest中需要有足够的空间。
关于new和delete
在c++中我们用new和delete在对内存进行动态的分配。
new[] 与delete []配合使用。
关于成员函数
1.成员函数可以调用class中所有成员。包括形参中的private成员,这里的形参当然是指自己的类型,比如class String中一个成员函数是,String(const String &str)
形参String类型就是本类的类型,可以直接调用该类的private成员。
这里直接粘源码。
#include <iostream>
#include <cstring>
`
using namespace std;
class String{
public:
String()=default; //默认构造函数
String(const char *str); //构造函数
String(const String &str); //复制构造函数
String& operator=(const String &str); //重载赋值运算符
// String operator+(const String &str1, const String &str2); //重载加号运算符
/*用成员方式重载运算符, 不能改变参数的个数
二元运算符用成员重载时, 只需要一个参数, 另一个参数由this指针传入
所以, 像
rmb::operator+(rmb&, rmb&)
都要改成
rmb::operator+(rmb&)
第一个参数由this指针自动传入到函数中去的.
两个参数可以做成友元函数。*/
friend String operator+(const String &str1, const String &str2); //重载加号运算符
~String() {delete []data;}
private:
char *data;
};
//构造函数
String::String(const char *str)
{
if(str)
{
data = new char[strlen(str) + 1];
strcpy(data, str);
}
else
{
data = new char[1];
*data = ‘\0’;
}
}
//复制构造函数
String::String(const String &str)
{
data = new char[strlen(str.data) + 1];
strcpy(data, str.data);
}
//重载赋值运算符
String& String::operator=(const String &str)
{
if(this == &str)
return *this;
else
{//赋值的过程先抹去内存中的内容在进行赋值
delete []data;
data = new char[strlen(str.data) + 1];
strcpy(data, str.data);
return *this;
}
}
//重载加号运算符
//String String::operator+(const String &str1, const String &str2)
String operator+(const String &str1, const String &str2)
{
String tmp;
delete tmp.data;
tmp.data = new char[strlen(str1.data) + strlen(str2.data) + 1];
strcpy(tmp.data, str1.data);
strcat(tmp.data, str2.data);
return tmp;
}
int main()
{
cout << “Hello world!” << endl;
String a(“hello”), b(” world”);
String c = a + b;
//cout << c << endl;
char tmp[4] = {‘a’, ‘b’, ‘c’, ‘d’};
cout << tmp << endl;
return 0;
}
`
- 写一个简单String类
- c++写的一个简单的string类
- 写个简单string类
- 自己写一个string类
- C++写一个String类
- 学了String写的一个简单的小功能。
- 一个简单的String类
- 写一个仿string的类
- 面试题:写一个string类
- 一个简单的string类实现
- 一个简单的string类实现
- 一个C++ String类的简单实现
- 自己动手实现一个简单的String类
- 创建一个简单的string类
- 一个简单的String操作工具类
- 一个string类的简单实现
- 一个简单string类的实现
- 【4】实现一个简单的String类
- Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 先序和中序中恢复二叉树 解题报告
- light oj 1212 - Double Ended Queue (双向队列)
- Codeforces Round #347 (Div. 1) E. Binary Table ★ ★ ★
- UVA10054The Necklace
- sed命令用法
- 写一个简单String类
- 第三周 项目一-顺序表的基本运算(1)
- 编译安装muduo库
- 设置label的描边
- 51Nod 1073 - 约瑟夫环(数论)
- 稀疏自动编码器 (Sparse Autoencoder)
- <base>标签在制做Iframe管理系统框架
- python内置函数02
- sql查询语句