#pragma once
#include
#include
#define _SIZE_ 100
using namespace std;
class Count
{
public:
Count() :count(1){}
void add()
{
count++;
}
void dec()
{
count--;
}
int getcount()
{
return count;
}
private:
int count;
};
class String
{
public:
String(const char *s = "")
{
copy(ptr,s);
}
String(const String &s)
{
copy(ptr,s.ptr);
counT.add();
}
String& operator=(const String& s)
{
if (this != &s)
{
String tmp(s.ptr);
char *temp = tmp.ptr;
tmp.ptr = ptr;
ptr = temp;//內存安全。
}
return *this;
}
~String()
{
if (counT.getcount() == 1)
{
cout << ptr << " :del" << endl;
delete[]ptr;
}
}
friend ostream& operator<<(ostream& os, String &s)
{
os << s.ptr;
return os;
}
friend istream& operator>>(istream& is, String &s)
{
char buf[_SIZE_];
is >> buf;
s.copy(s.ptr,buf);
return is;
}
String& operator += (const String &s)
{
char *buf = new char[strlen(ptr) + strlen(s.ptr) + 1];
strcpy(buf, ptr);
strcat(buf,s.ptr);
copy(ptr,buf);
return *this;
}
String& operator +=(const char *str)
{
char *buf = new char[strlen(ptr) + strlen(str) + 1];
strcpy(buf,ptr);
strcat(buf,str);
copy(ptr,buf);
return *this;
}
bool operator != (const String &s)
{
return strcmp(ptr,s.ptr);
}
bool operator ==(const String &s)
{
return !strcmp(ptr,s.ptr);
}
private:
void copy(char *&p,const char *s)
{
p = new char[strlen(s) + 1];
strcpy(p,s);
}
private:
char *ptr;
Count counT;
};
#include
#include "String.h"
using namespace std;
int main()
{
String s("123");
String s1("456");
s += s1;
return 0;
}
“`