class String
{
public:
String(const char* a=NULL);
String(const String&a);
~String();
void operator=(const char* a);
void operator=(String &a);
String operator+(const char* a);
String operator+(String a);
void operator<(const char* a);
void operator<(String a);
void operator>(const char* a);
void operator>(String a);
void print();
private:
char *m_str;
};
String String::operator+(const char* a)
{
String c;
c.m_str = new char[strlen(a) + strlen(m_str) + 1];
int i = 0;
for (; i < strlen(m_str); i++)
{
c.m_str[i] = m_str[i];
}
for (int t = 0; t < strlen(a); t++)
{
c.m_str[i] = a[t];
}
return c;
}
String String::operator+(String a)
{
String c;
c.m_str = new char[strlen(a.m_str) + strlen(m_str) + 1];
int i = 0;
for (; i < strlen(m_str); i++)
{
c.m_str[i] = m_str[i];
}
for (int t = 0; t <=strlen(a.m_str); t++,i++)
{
c.m_str[i] = a.m_str[t];
}
return c;
}
void String::operator<(const char* a)
{
}
void String::operator<(String a)
{
}
void String::operator>(const char* a)
{
}
void String::operator>(String a)
{
}
String::String(const char* a)
{
if (a == NULL)
{
m_str = new char[1];
m_str[0] = '\0';
}
else
{
int b = strlen(a);
m_str = new char[b+1 ];
strcpy_s(m_str,b+1,a);
}
}
String::String(const String&a)
{
int b = strlen(a.m_str);
m_str = new char[b + 1];
strcpy_s(m_str, b + 1, a.m_str);
}
String::~String()
{
printf("析构%s",this->m_str);
delete[]m_str;
m_str = NULL;
}
void String::operator=(const char* a)
{
int b = strlen(a);
m_str = new char[b + 1];
strcpy_s(m_str, b + 1, a);
}
void String::operator=(String& a)
{
int b = strlen(a.m_str);
m_str = new char[b + 1];
strcpy_s(m_str, b + 1, a.m_str);
}
void String::print()
{
cout<<m_str<<endl;
}
int main()
{
String s1 = "abc";
String s2 ("def");
String s3 =s1;
String s4 = s1+s3;
s1.print();
s2.print();
s3.print();
s4.print();
return 0;
}
String s4 = s1+s3;这一行会调用析构函数,释放内存的时候会弹出系统的debug窗口!
图片说明