using namespace std;
class String
{
public:
String(const char *str = NULL);
String(const String &other);
char* Stringcpy(char *dst,const char *src);
~String(void);
String & operator=(const String &other);
bool operator==(const String &str);
friend std::ostream & operator<<(std::ostream& o, const String &str);
private:
char *m_data;
};
/*
构造、析构、拷贝构造、赋值运、流输出运算
*/
String::String(const char *str)
{
if (str == NULL){
m_data = new char[1];
*m_data = '\0';
}
else{
int len = strlen(str);
m_data = new char[len + 1];
Stringcpy(m_data, str);
}
}
String::~String(void)
{
delete[] m_data;
}
String::String(const String &other)
{
int len = strlen(other.m_data);
m_data = new char[len + 1];
Stringcpy(m_data, other.m_data);
}
char* String::Stringcpy(char *dst,const char *src)
{
assert(dst != NULL);
assert(src != NULL);
char *ret = dst;
while ((*dst++ = *src++) != '\0')
;
return ret;
}
String & String::operator=(const String &other)
{
if (this == &other)
return *this;
delete[]m_data;
int len = strlen(other.m_data);
m_data = new char[len + 1];
Stringcpy(m_data, other.m_data);
return *this;
}
bool String::operator==(const String &str)
{
return strcmp(m_data, str.m_data) == 0;
}
ostream & operator<<(ostream &o, const String &str)
{
o << str.m_data;
return o;
}
int main()
{
String s = "hello";
String s2 = s;
String ss = "hello";
cout << "s = " << s << endl;
cout << "s2 = " << s2 << endl;
cout << boolalpha << (ss == s) << std::endl;
}
std::string类的实现
最新推荐文章于 2024-05-17 08:47:34 发布