#include "stdafx.h"
#include
#include
class String
{
public:
String();
String(const char *str);
String(const String &s);
~String();
String& operator=(const String &str);
friend ostream& operator<
friend istream& operator>>(istream& in,String& s);
friend bool operator
char& operator[](int pos)
{
cout<
int len=strlen(data);
if (pos>=len)
{
return data[len-1];
}
else
{
return data[pos];
}
}
private:
char *data;
};
//默认构造函数
String::String()
{
cout<
data=new char[1];
*data='\0';
}
//带参数构造函数
String::String(const char *str)
{
cout<
if (str==NULL)
{
data=new char[1];
*data='\0';
}
else
{
int len=strlen(str);
data=new char[len+1];
strcpy(data,str);
}
}
//复制构造函数
String::String(const String &str)
{
cout<
int len=strlen(str.data);
data=new char[len+1];
strcpy(data,str.data);
}
//析构函数
String::~String()
{
cout<
delete[] data;
}
//赋值操作符
String& String::operator=(const String &str)
{
cout<
if (this!=&str)
{
int len=strlen(str.data);
delete[] data;
data=new char[len+1];
strcpy(data,str.data);
}
return *this;
}
//输出操作符
ostream& operator<
{
cout<
out<
return out;
}
//输入操作符
istream& operator>>(istream& in,String& s)
{
cout<
//这个地方很伤神,目前没有想到很好的办法,只能先用中间变量来获取输入的长度,然后释放中间变量
char *sTemp=new char[1000];
in>>sTemp;
delete[] s.data;
int len=strlen(sTemp);
s.data=new char[len+1];
strcpy(s.data,sTemp);
delete[] sTemp;
return in;
}
//比较操作符
bool operator
{
cout<
if (strcmp(s1.data,s2.data)<0)
{
return 1;
}
return 0;
}
void main()
{
String s1; //default constructor
String s2("12345"); //parameter constructor
String s3=s2; //copy constructor
s1=s2; //assign operator
cin>>s1; //输入操作符
cout<
cout<
cout<
//destructor destructor destructor
}