{ char *str; //
int size; //
public:
string(); //
string(int n,char *s); //
string(const string &); //
~string(); //
friend string operator+(string, const string);
string &operator=(const string &);
void see();
};
string::string(){size=0; str=NULL;}; //
string::string(int n,char *s) //
{ str=new char[size=n>=(strlen(s)+1)? n: strlen(s)+1];
strcpy(str,s);
}
string::string(const string &a) //
{ str=new char[a.size+1]; // this->str (+1 \0)
strcpy(str,a.str); //
size=strlen(str)+1;
}
string::~string(){ if(str) delete [] str;}
string operator+(string s1, const string s2) // +
{ string ss;
if(!ss.str) ss.str=new char[ss.size=strlen(s1.str)+strlen(s2.str)+2];
for(int i=0; ss.str[i]=s1.str[i]; i++); // \0
ss.str[i]=' '; // \0
for(int j=0; ss.str[i+1]=s2.str[j]; i++,j++); //
return ss;
}
string &string::operator =(const string &st) // =
{ if(this!=&st) // ,
{ delete str; //
str=new char[size=st.size];//
strcpy(str,st.str);
}
return *this;
}
void string::see()
{ cout << this->str << endl;
}
int main()
{ string s1(10,""), s2(30,""), s3(30," ");
s1.see();
s2.see();
string s4=s1; //
s4.see();
string s5(s1); //
s5.see();
s1+s2; // + ( operator +)
s1.see();
s3=s2; // = ( operator =)
s3.see();
s3=s1+s2; // +, =
s3.see();
return 0;
}
:
string s4=s1 s4. string s5(s1) s5. s1+s2 ( s2, s1). operator+ s1+s2. ( return ss) . s3=s2 s2 , operator= ( ) .
5.2.5. []
, operator ++ ( , ). ++ , , . []. -, friend- . operator[]()
__ _::operator [](int i)
{ }
int, , operator[] . []:
#include <iostream>
using namespace std;