71 lines
1.2 KiB
C++
71 lines
1.2 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) {
|
|
// 目的端 本来存在
|
|
delete[] m_data;
|
|
// 在重新申请一块空间 堆
|
|
m_data = new char[strlen(str.m_data) + 1];
|
|
strcpy(m_data, str.m_data);
|
|
return *this;
|
|
} |