//String 类的实现
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
class String
{
public:
String(const char *str = NULL); //通用构造函数
String(const String &str); //拷贝构造函数
~String(); //析构函数
String operator+(const String &str) const;
String& operator=(const String &str) ;
String& operator+=(const String &str);
bool operator==(const String &str) const;
char& operator[](int n) const;
size_t size() const; //获取长度
const char* c_str() const; //获取C字符串
friend istream& operator >> (istream &is, String &str); //输入
friend ostream& operator << (ostream &os, String &str); //输出
private:
char *data;
size_t length;
};
//默认构造函数
String::String(const char *str)
{
if (!str)
{
length = 0;
data = new char[1];
*data = '\0';
}
else
{
length = strlen(str);
data = new char(length + 1);
strcpy(data, str);
}
}
//拷贝构造函数
String::String(const String& str)
{
length = str.size();
data = new char(length + 1);
strcpy(data, str.c_str());
}
//析构函数
String::~String()
{
delete[]data;
length = 0;
}
//重载字符串
String String::operator+(const String &str) const
{
String newString;
newString.length = length + str.size();
newString.data = new char[newString.length + 1];
strcpy(newString.data, data);
strcat(newString.data, str.data);
return newString;
}
//赋值运算符
String& String::operator=(const String &str)
{
if (this == &str)
{
return *this;
}
delete[] data; //为了避免内存泄漏
length = str.length;
data = new char[length + 1];
strcpy(data, str.c_str());
return *this;
}
String& String::operator +=(const String &str)
{
length += str.length;
char *newData = new char[length + 1];
strcpy(newData, data);
strcat(newData, str.data);
delete[]data;
data = newData;
return *this;
}
inline bool String::operator==(const String &str) const
{
if (length != str.length);
return strcmp(data, str.data);
}
inline char& String::operator[](int n) const
{
if (n >= length)
{
return data[length - 1]; //错误处理
}
else {
return data[n];
}
}
inline size_t String::size() const
{
return length;
}
istream& operator >> (istream &is, String &str)
{
char tem[1000]; //简单的申请一块内存
is >> tem;
str.length = strlen(tem);
str.data = new char[str.length + 1];
strcpy(str.data, tem);
return is;
}
ostream& operator<<(ostream &os, String &str)
{
os << str.data;
return os;
}
inline const char* String::c_str() const {
return data;
}
int main()
{
String s;
cin >> s;
cout << s;
return 0;
}
String 类的实现
最新推荐文章于 2023-04-16 10:41:06 发布