|
바루 이코듭니당^^
허접한 제가 보니.. 어째 좀 이상한 곳이 몇군데 있군요.. 책그대룬데( teach yourself c++
in 21 days. 제시 리버티..)
제가 고칠대루 고쳐 봐두 안되길래^^ 원문 그대루 올려 봤습니다..
고수님 도와주세요.. 주석정도만 달아주셔도 .. 정말 감사할것 같은데..^^
어쩜 좋아요.. 이게 걸려서 담 장으루 못넘어 가구 있습니다..
고수님 도와주세요.
특히 조 아래 상수 string & 를 인수로 가지는 생성자가..ㅠㅠ
#include<iostream.h>
#include<string.h>
class string
{
public:
string();
string(const char * const);
string(const string &);
~string();
char & operator [](unsigned short offset);
char operator [] (unsigned short offset) const;
string operator + (const string&);
void operator +=(const string&);
string & operator = (const string &);
unsigned short getlen() const {return itslen;}
const char * getstring() const {return itsstring;}
private:
string (unsigned short);
char * itsstring;
unsigned short itslen;
};
string::string()
{
itsstring = new char[1];
itsstring[0] = '\0';
itslen=0;
}
string::string(unsigned short len)
{
itsstring = new char[len+1];
for (int i=0; i<=len ;i++)
itsstring[i] = '\0';
itslen=len;
}
string::string(const char * const cstring)
{
itslen = strlen(cstring);
itsstring=new char[itslen+1];
for(unsigned short i=0;i<=itslen;i++)
itsstring[i]=cstring[i];
itsstring[itslen]='\0';
}
string::string (const string & rhs)
{
itslen = rhs.getlen();
itsstring=new char[itslen+1];
for (unsigned short i=0; i<=itslen;i++)
itsstring[i]=rhs[i];
itsstring[itslen] = '\0';
}
string::~string()
{
delete [] itsstring;
itslen=0;
}
string & string::operator = (const string & rhs)
{
if (this==&rhs)
return *this;
delete []itsstring;
itslen=rhs.getlen();
itsstring = new char [itslen+1];
for (unsigned short i=0;i<=itslen;i++)
itsstring[i]=rhs[i];
itsstring[itslen]='\0';
return *this;
}
char & string::operator[] (unsigned short offset)
{
if (offset>itslen)
return itsstring[itslen-1];
else
return itsstring[offset];
}
char string::operator [](unsigned short offset) const
{
if (offset>itslen)
return itsstring[itslen-1];
else
return itsstring[offset];
}
string string::operator +( const string & rhs)
{
unsigned short totallen = itslen+rhs.getlen();
string temp(totallen);
for(unsigned short i=0; i<=itslen;i++)
temp[i] = itsstring[i];
for(unsigned short j=0;j<rhs.getlen();j++,i++)
temp[i]=rhs[j];
temp [totallen]='\0';
return temp;
}
void string::operator +=(const string &rhs)
{
unsigned short rhslen = rhs.getlen();
unsigned short totallen= itslen+ rhs.getlen();
string temp(totallen);
for (unsigned short i=0;i<itslen;i++)
temp[i]=itsstring[i];
for (unsigned short j=0;j<rhs.getlen();j++,i++)
temp[i]=rhs[i-itslen];
temp[totallen]='\0';
*this=temp;
}
int main()
{
string s1("initial test");
cout<<"s1:\t"<<s1.getstring()<<endl;
char *temp ="hello world";
s1=temp;
cout<<"s1:\t"<<s1.getstring()<<endl;
char temptwo[20];
strcpy(temptwo,"nice to be here!");
s1 +=temptwo;
cout<<"temptwo\t"<<temptwo<<endl;
cout<<"s1\t"<<s1.getstring()<<endl;
cout<<"s1[4]"<<s1[4]<<endl;
s1[4]='x';
cout<<"s1:\t"<<s1.getstring()<<endl;
cout<<"s1[999]\t"<<s1[999]<<endl;
string s2("another string");
string s3;
s3=s1+s2;
cout <<"s3:\t"<<s3.getstring()<<endl;
string s4;
s4="why does this this work?";
cout<<"s4\t"<<s4.getstring()<<endl;
return 0;
}
|