#include <iostream>
#include <string.h>
using namespace std;
class Count
{
public:
Count():number(1){}
bool countsub()
{
number--;
}
bool countadd()
{
number++;
}
bool IsOne()
{
if(number==1)return true;
else return false;
}
private:
int number;
};
class String
{
public:
String()
{
_initString("",1);
}
String(const String& s)
{
_initString(s.ptr,strlen(s.ptr));
count.countadd();
}
String(const char *pc, size_t len)
{
_initString(pc,len);
}
String(const char *pc)
{
_initString(pc,strlen(pc));
}
~String()
{
if(count.IsOne())
{
cout<<"~String()"<<endl;
delete [] ptr;
}
count.countsub();
}
String& operator=(const String &s)
{
if(this!=&s)
{
if(ptr!=NULL)
delete ptr;
_initString(s.ptr,strlen(s.ptr));
}
}
String& operator=(const char *s)
{
_initString(s,strlen(s));
}
String& operator+=(const String &rhs)
{
char *buf = new char[strlen(rhs.ptr)+strlen(ptr)+1];
_initString(buf,strlen(buf));
}
String& operator+=(const char *rhs)
{
if(!rhs)
{
strcat(ptr,rhs);
}
}
void printf()const
{
cout<<ptr<<endl;
}
size_t getLength()const
{
return strlen(ptr);
}
char* operator[](size_t size)
{
return &ptr[size];
//return (char *)((String *)this->ptr[size]);
}
private:
void _initString(const char *cstr, size_t len)
{
ptr = new char[len+1];
strncpy(ptr,cstr,len);
}
private:
Count count;
char *ptr;
};
int main()
{
String s("1234");
*(s[2])='0';
s.printf();
//String b("1234567",2);
//String c(b);
//String d;
//d = c;
//b.printf();
//s.printf();
}
String类
最新推荐文章于 2023-07-10 17:24:38 发布