MTSL/h/String.h
youspectrum 2afe10c1f7 Link_List file 改名为 List
List 更改成模板类
添加了 转换函数(重载)
添加了 单链 单体 单键 设计模式
2022-09-27 21:16:39 +08:00

77 lines
1.4 KiB
C++

//
// Created by dongl on 22-9-25.
//
#ifndef UNTITLED_STRING_H
#define UNTITLED_STRING_H
#include <cstring>
#endif //UNTITLED_STRING_H
class String {
public:
// 使用字符数组初始化
String(const char *c_str = nullptr);
// 使用String初始化
String(const String &str);
// 使用=赋值 重载赋值
String &operator=(const String &str);
// 析构 回收
~String();
// 返回常量
char *get_c_str() const {
return m_data;
}
private:
char *m_data;
};
inline
String::String(const char *c_str) {
if (c_str) {
// 申请空间
m_data = new char[strlen(c_str) + 1];
// 拷贝
strcpy(m_data, c_str);
} else { // 未指定初值
m_data = new char[1];
*m_data = '\0';
}
}
// 析构
inline
String::~String() {
delete[] m_data;
}
// 拷贝 直接初始化构造
inline
String::String(const String& str) {
m_data = new char[strlen(str.m_data) + 1];
strcpy(m_data,str.m_data);
}
inline
String &String::operator=(const String& str) { // String& 引用
// 拷贝赋值 是否是自我赋值
// 来源端与目的端是否相同 指针对比地址 &str取地址
if(this == &str){
return *this;
}
// 目的端 本来存在
delete[] m_data;
// 在重新申请一块空间 堆
m_data = new char[strlen(str.m_data) + 1];
strcpy(m_data, str.m_data);
return *this;
}