String類は簡単に実現されます(構造、コピー構造、分析、分配、出力、比較、文字列プラス、長さ、サブストリング)
3126 ワード
説明を実現する:文字列クラスStringの簡単な実現、内部は文字配列を採用して実現します.
運行プラットフォーム:VSL 2010
参考:http://rsljdkt.iteye.com/blog/770072
経験説明:コピーコンストラクタ、リロード演算子、コンストラクタを実現する3つの操作は、カスタムクラスを実現する際に、しばしば同時に出現します.
実行結果:
運行プラットフォーム:VSL 2010
参考:http://rsljdkt.iteye.com/blog/770072
経験説明:コピーコンストラクタ、リロード演算子、コンストラクタを実現する3つの操作は、カスタムクラスを実現する際に、しばしば同時に出現します.
#include <iostream>
using namespace std;
class String{
public:
String(const char *str = NULL);//
String(const String &str);//
~String();//
String operator+(const String & str);//
String & operator=(const String &str);//
bool operator==(const String &str);//
int Length();//
friend ostream & operator<<(ostream &o,const String &str);//
String SubStr(int start, int end);// (start ... end-1)
private:
char * charArray;
};
String::String(const char *str)
{
if(str == NULL){
charArray=new char[1];
charArray[0]='\0';
}else{
charArray=new char[strlen(str)+1];
strcpy(charArray,str);
}
}
String::String(const String &str)
{
charArray = new char[strlen(str.charArray)+1];
strcpy(charArray,str.charArray);
}
String::~String()
{
delete [] charArray;
}
String String::operator+(const String &str)
{
String res;
delete [] res.charArray;//
res.charArray = new char[strlen(charArray)+strlen(str.charArray)+1];
strcpy(res.charArray,charArray);
strcpy(res.charArray+strlen(charArray),str.charArray);
return res;
}
String & String::operator=(const String &str)
{
if(charArray == str.charArray)
return *this;
delete [] charArray;
charArray = new char[strlen(str.charArray)+1];
strcpy(charArray,str.charArray);
return *this;
}
bool String::operator==(const String &str)
{
return strcmp(charArray,str.charArray) == 0;
}
int String::Length()
{
return strlen(charArray);
}
ostream & operator<<(ostream &o, const String &str)
{
o<<str.charArray;
return o;
}
String String::SubStr(int start, int end)
{
String res;
delete [] res.charArray;//
res.charArray = new char[end-start+1];//
for(int i=0; i+start<end; i++){
res.charArray[i]=charArray[start+i];
}
res.charArray[end-start] = '\0';
return res;
}
void test()
{
String s = "abcd";
String t = "abcd";
cout<<s<<(s==t?" == ":" != ")<<t<<endl;
String s2 = "Hello ";
String s3 = "China!";
cout<<s2+s3<<endl;
cout<<(s2+s3).SubStr(0,s2.Length()+s3.Length())<<endl;
}
int main()
{
test();
system("pause");
}
実行結果:
abcd == abcd
Hello China!
Hello China!
. . .