?? 例10.4.txt
字號(hào):
例10.4 定義一個(gè)字符串類String,用來存放不定長的字符串,重載運(yùn)算符“==”,“<”和“>”,用于兩個(gè)字符串的等于、小于和大于的比較運(yùn)算。
為了使讀者便于理解程序,同時(shí)也使讀者了解建立程序的步驟,下面分幾步來介紹編程過程。
(1) 先建立一個(gè)String類:
#include <iostream>
using namespace std;
class String
{public:
String( ){p=NULL;} //默認(rèn)構(gòu)造函數(shù)
String(char *str); //構(gòu)造函數(shù)
void display( );
private:
char *p; //字符型指針,用于指向字符串
};
String∷String(char *str) //定義構(gòu)造函數(shù)
{p=str;} //使p指向?qū)崊⒆址?
void String∷display( ) //輸出p所指向的字符串
{cout<<p;}
int main( )
{String string1(″Hello″),string2(″Book″);
string1.display( );
cout<<endl;
string2.display( );
return 0;
}
(2) 有了這個(gè)基礎(chǔ)后,再增加其他必要的內(nèi)容。現(xiàn)在增加對運(yùn)算符重載的部分。為便于編寫和調(diào)試,先重載一個(gè)運(yùn)算符“>”。程序如下:
#include <iostream>
#include <string>
using namespace std;
class String
{public:
String( ){p=NULL;}
String(char *str);
friend bool operator>(String &string1,String &string2);//聲明運(yùn)算符函數(shù)為友元函數(shù)
void display( );
private:
char *p; //字符型指針,用于指向字符串
};
String∷String(char *str)
{p=str;}
void String∷display( ) //輸出p所指向的字符串
{cout<<p;}
bool operator>(String &string1,String &string2) //定義運(yùn)算符重載函數(shù)
{if(strcmp(string1.p,string2.p)>0)
return true;
else return false;
}
int main( )
{String string1(″Hello″),string2(″Book″);
cout<<(string1>string2)<<endl;
}
(3) 擴(kuò)展到對3個(gè)運(yùn)算符重載。
在String類體中聲明3個(gè)成員函數(shù):
friend bool operator> (String &string1, String &string2);
friend bool operator< (String &string1, String &string2);
friend bool operator==(String &string1, String& string2);
在類外分別定義3個(gè)運(yùn)算符重載函數(shù):
bool operator>(String &string1,String &string2) //對運(yùn)算符“>”重載
{if(strcmp(string1.p,string2.p)>0)
return true;
else
return false;
}
bool operator<(String &string1,String &string2) //對運(yùn)算符“<”重載
{if(strcmp(string1.p,string2.p)<0)
return true;
else
return false;
}
bool operator==(String &string1,String &string2) //對運(yùn)算符“==”重載
{if(strcmp(string1.p,string2.p)==0)
return true;
else
return false;
}
再修改主函數(shù):
int main( )
{String string1(″Hello″),string2(″Book″),string3(″Computer″);
cout<<(string1>string2)<<endl; //比較結(jié)果應(yīng)該為true
cout<<(string1<string3)<<endl; //比較結(jié)果應(yīng)該為false
cout<<(string1==string2)<<endl; //比較結(jié)果應(yīng)該為false
return 0;
}
(4) 再進(jìn)一步修飾完善,使輸出結(jié)果更直觀。下面給出最后的程序。
#include <iostream>
using namespace std;
class String
{public:
String( ){p=NULL;}
String(char *str);
friend bool operator>(String &string1,String &string2);
friend bool operator<(String &string1,String &string2);
friend bool operator==(String &string1,String &string2);
void display( );
private:
char *p;
};
String∷String(char *str)
{p=str;}
void String∷display( ) //輸出p所指向的字符串
{cout<<p;}
bool operator>(String &string1,String &string2)
{if(strcmp(string1.p,string2.p)>0)
return true;
else
return false;
}
bool operator<(String &string1,String &string2)
{if(strcmp(string1.p,string2.p)<0)
return true;
else
return false;
}
bool operator==(String &string1,String &string2)
{if(strcmp(string1.p,string2.p)==0)
return true;
else
return false;
}
void compare(String &string1,String &string2)
{if(operator>(string1,string2)==1)
{string1.display( );cout<<″>″;string2.display( );}
else
if(operator<(string1,string2)==1)
{string1.display( );cout<<″<″;string2.display( );}
else
if(operator==(string1,string2)==1)
{string1.display( );cout<<″=″;string2.display( );}
cout<<endl;
}
int main( )
{String string1(″Hello″),string2(″Book″),string3(″Computer″),string4(″Hello″);
compare(string1,string2);
compare(string2,string3);
compare(string1,string4);
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -