//String.h
#ifndef STRING_H_H
#define STRING_H_H
#include <cstring>
#include <iostream>
using std::ostream;
using std::istream;
using std::cout;
using std::cin;
class String
{
friend ostream& operator<<(ostream&, String&);
friend istream& operator>>(istream&, String&);
public:
String(const char* psz=NULL);
String(const String&);//直接初始化
~String();
String& operator=(const String&);//复制初始化
String operator+(const String&);
int GetLength() const;
int Compare(const String&) const;
private:
char *data;
int length;
};
#endif
//String.cpp
#include "String.h"
String::String(const char *psz)
{
length = strlen(psz);
data = new char[length + 1];
for (int i=0; i<length; i++)
data[i] = psz[i];
data[length] = '\0';
}
String::String(const String& rhs)
{
length = strlen(rhs.data);
data = new char[length];
char * tmp = rhs.data;
while (*data++ = *tmp++);
data[length] = '\0';
}
String::~String()
{
delete [] data;
}
String& String::operator=(const String& rhs)
{
if (this == &rhs)
return *this;
delete [] data;
length = rhs.length;
data = new char[length];
for (int i=0; i<length; i++)
data[i] = rhs.data[i];
data[length] = '\0';
return *this;
}
int String::GetLength() const
{
return length;
}
String String::operator+(const String& rhs)
{
int new_len = length + rhs.length;
char * str = new char[new_len-1];
int count = 0;
for (int i=0; i<length; i++) {
str[count] = data[i];
count++;
}
for (int i=0; i<rhs.length; i++) {
str[count] = rhs.data[i];
count++;
}
str[new_len] = '\0';
String tmp(str);
*this = tmp;
return *this;
}
int String::Compare(const String& rhs) const
{
return strcmp(data, rhs.data);
}
ostream& operator<<(ostream& os, String& str)
{
os<<str.data;
return os;
}
istream& operator>>(istream& is, String & str)
{
is >> str.data;
str.length = strlen(str.data);
return is;
}
//main.cpp
#include "String.h"
int main()
{
String str1("hello ");
String str2("world!");
String str3 = str1 + str2;
cout<<str3;
return 0;
}