77 lines
1.4 KiB
C++
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;
|
|
} |