要开始准备秋招了,将以前写过的东西拿出来再实现下
#include<iostream>
#include<assert.h>
using namespace std;
class String
{
public:
typedef char* Iterator;//这里直接使用char*就可以
public:
//<<重载需要友元来完成
friend ostream& operator<<(ostream& os, String& s);
public:
String(const char* str = "")
{
assert(str);
_str=new char[strlen(str) + 1];
strcpy(_str, str);
}
~String();
String(const char str[], int length);
String(const String& s);
String& operator=(const String& s);
String& operator=(const char*& str);
char& operator[](size_t pos);
const char& operator[](size_t pos)const;
Iterator begin();
Iterator end()
{
return _str + strlen(_str);
}
char* c_str()
{
return _str;
}
size_t size()
{
assert(_str);
return strlen(_str);
}
size_t length()
{
return size();
}
private:
char* _str;
};
String::String(const char str[], int length)
:_str(new char[length+1])
{
int i = 0;
for ( ; i < length; i++)
{
_str[i] = str[i];
}
_str[i] = '\0';
}
String::String(const String& s)
{
char* str = new char[strlen(s._str) + 1];
if (str == NULL)
exit(1);
strcpy(str, s._str);
delete _str;
_str = str;
}
String& String::operator=(const String& s)
{
if (this != &s)
{
char* tmp = new char[strlen(s._str) + 1];
strcpy(tmp, s._str);
delete _str;
_str = tmp;
}
return *this;
}
String& String::operator=(const char*& str)
{
if (_str != str)
{
char* tmp = new char[strlen(str) + 1];
delete _str;
_str = tmp;
}
return *this;
}
char& String::operator[](size_t pos)
{
return _str[pos];
}
const char& String::operator[](size_t pos)const
{
return _str[pos];
}
String::~String()
{
delete _str;
}
String::Iterator String::begin()
{ return _str; }
ostream& operator<<(ostream& os, String& s)
{
os << s._str << endl;
return os;
}