#include <string.h>
#include <istream>
#include <ostream>
#include <iostream>
#include <iomanip>
using namespace std;
class String
{
public:
String(const char *str = NULL); // general constructor
String(const String &r); // copy constructor
~String(void); // destructor
String& operator=(const String &r); //
int size(){return strlen(m_data);}
char* c_str() {return m_data;}
friend istream &operator>>(istream &is, String &r)
{
const int size = 4096;
r.m_data = new char[size];
return is >> setw(size) >> r.m_data;
}
friend ostream &operator<<(ostream &os, String &r)
{
return os << r.m_data;
}
private:
char *m_data;
};
String::String(const char *r)
{
if(r==NULL) {
m_data = new char[1];
m_data[0] = '\0';
} else {
int len = strlen(r);
m_data = new char[len + 1];
strcpy(m_data, r);
}
}
String::String(const String &r)
{
int len = strlen(r.m_data);
m_data = new char[len + 1];
strcpy(m_data, r.m_data);
}
String& String::operator =(const String &r)
{
if(this == &r) return *this;
delete [] m_data;
int len = strlen(r.m_data );
m_data = new char[len + 1];
strcpy(m_data, r.m_data);
return *this;
}
String::~String(void)
{
delete [] m_data;
}
int main(int argc, char **argv)
{
String str1;
String str2("Beijing");
String str3("Tianjing");
String str4(str2);
String str5;
str5 = str3;
cout << "str1 = " << str1 << endl;
cout << "str2 = " << str2 << endl;
cout << "str3 = " << str3 << endl;
cout << "str4 = " << str4 << endl;
cout << "str5 = " << str5 << endl;
}