您的位置:首页 > 编程语言 > C语言/C++

String类的简单实现

2017-10-30 13:03 155 查看
一句话总结:注意C++string与C中的字符数组的区别,C++string遇到'\0'不一定会结束输出。

#include <iostream>
#include <string.h>
using namespace std;

class String
{
friend ostream& operator<<(ostream& out, String& s);
public:
String(const char* str="");
~String();
String(const String& other);
String& operator=(const String& other);
unsigned int size() const;

private:
char* data;
unsigned int length;
};

String::String(const char* str)
{
if (NULL == str)
{
length = 0;
data = new char[1];
data[0] = '\0';
}
else
{
length = strlen(str);
data = new char[length+1];
}

if (data != NULL)
{
strcpy(data, str);
}
}

String::~String()
{
if (data != NULL)
{
delete data;
}
}

String::String(const String& other)
{
if (&other != this)
{
if (data != NULL)
{
delete data;
}
length = other.size();
data = new char[length + 1];
memcpy(data, other.data, length);
}
}

String& String::operator=(const String& other)
{
if (&other != this)
{
if (data != NULL)
{
delete data;
}
length = other.size();
data = new char[length+1];
if (data != NULL)
{
memcpy(data, other.data, length);
data[length] = '\0';
}
}
return *this;
}

ostream& operator<<(ostream& out, String& s)
{
out << s.data;
return out;
}

unsigned int String::size() const
{
return this->length;
}

int main(int argc, char const *argv[])
{
String str("hello");
cout << str <<endl;
cout << str.size() <<endl;
String str2 = "boy";
cout << str2 <<endl;
String str3 = str;
cout << str3 <<endl;
return 0;
}

zjy@ubuntu:~$ ./string 

hello

5

boy

hello

zjy@ubuntu:~$
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ string