⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 例10.4.txt

📁 c++语言程序设计 谭浩强 例题及课后题源码.
💻 TXT
字号:
例10.4 定义一个字符串类String,用来存放不定长的字符串,重载运算符“==”,“<”和“>”,用于两个字符串的等于、小于和大于的比较运算。
为了使读者便于理解程序,同时也使读者了解建立程序的步骤,下面分几步来介绍编程过程。
(1) 先建立一个String类: 
#include <iostream>
using namespace std;
class String
{public:
String( ){p=NULL;}                             //默认构造函数
String(char *str);                            //构造函数
void display( );
private:
char *p;                                       //字符型指针,用于指向字符串
};
String∷String(char *str)                          //定义构造函数
{p=str;}                                           //使p指向实参字符串

void String∷display( )                             //输出p所指向的字符串
{cout<<p;}

int main( )
{String string1(″Hello″),string2(″Book″);
string1.display( );
cout<<endl;
string2.display( );
return 0;
}

(2) 有了这个基础后,再增加其他必要的内容。现在增加对运算符重载的部分。为便于编写和调试,先重载一个运算符“>”。程序如下: 
#include <iostream>
#include <string>
using namespace std;
class String
{public:
String( ){p=NULL;}
String(char *str);
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;
}

int main( )
{String string1(″Hello″),string2(″Book″);
cout<<(string1>string2)<<endl;
}

(3) 扩展到对3个运算符重载。
在String类体中声明3个成员函数: 
friend bool operator> (String &string1, String &string2);
friend bool operator< (String &string1, String &string2);
friend bool operator==(String &string1, String& string2);
在类外分别定义3个运算符重载函数: 
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;
}
再修改主函数: 
int main( )
{String string1(″Hello″),string2(″Book″),string3(″Computer″);
cout<<(string1>string2)<<endl;            //比较结果应该为true
cout<<(string1<string3)<<endl;            //比较结果应该为false 
cout<<(string1==string2)<<endl;           //比较结果应该为false 
return 0;
}

(4) 再进一步修饰完善,使输出结果更直观。下面给出最后的程序。
#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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -