C++重载双目运算符

Posted Linux编程学堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++重载双目运算符相关的知识,希望对你有一定的参考价值。

重载双目运算符

双目运算符(或称 二元运算符)是C++中最常用的运算符。双目运算符有两个操作数,通常在运算符的左右两侧,如 3 + 5,a = b, x < 10 等。在重载双目运算符时,不言而喻在函数中应该有两个参数。下面再举一个例子说明重载双目运算符的应用。

定义一个字符串类 String,用来存放不定长的字符串,重载运算符“==”,“<”和“>”,用于两个字符串的等于,小于和大于的比较运算。

为了使读者便于理解程序,同时也使读者了解建立程序的步骤,下面分几步来介绍编程过程。

(1) 先建立一个my_string类:

 程序运行的结果如下:

 

先编写出最简单的程序框架,这是一个可供运行的程序。编写和调试都比较容易。

(2) 有了这个基础之后,再增加其他必要的内容。现在增加对运算符重载的部分。为便于编写和调试,先重载运算符“>”,程序如下:

 

程序运行结果如下:

g++ test.cpp -o exe

wkf@ubuntu:~/c++$ ./exe

str1 > str2

程序所增加的部分内容是很容易看懂的,将运算符重载函数声明为友元函数。运算符“>”重载成功,既然对运算符“>”的重载成功了,其他两个运算符的重载也是如法炮制即可。

(3) 扩展到对 3 个运算符重载。

在my_string 类体中声明 3 个重载元素为友元函数:

friend bool operator > (my_string &str1, my_string &str2); //声明为友元函数

friend bool operator < (my_string &str1, my_string &str2); //声明为友元函数

friend bool operator == (my_string &str1, my_string &str2); //声明为友元函数

在类外分别定义这 3 个运算符重载函数:

/*定义的这个重载运算符函数,不是类的一个成员函数,所以,为了能够操作类的私有成员,在上面的my_string类中声明为友元函数*/

//重载“>”运算符

bool operator > (my_string &str1, my_string &str2)

if(strcmp(str1.p, str2.p) > 0)

return true;

else

return false;

//重载“<”运算符

bool operator < (my_string &str1, my_string &str2)

if(strcmp(str1.p, str2.p) < 0)

return true;

else

return false;

//重载“==”运算符

bool operator == (my_string &str1, my_string &str2)

if(strcmp(str1.p, str2.p) == 0)

return true;

else

return false;

对于上面这个例子,我们在操作运算符的时候,定义如下操作的个数:

my_string str1("hello"), str2("Book");

if(str1 > str2)

cout << "str1 > str2" << endl;

else

cout << "str1 <= str2" << endl;

所以,对于“>”运算符,其左操作数是 String 对象,那么,也可以把这个重载运算符函数定义为my_string类的一个成员函数。这样,定义的重载运算符函数可以只需要一个参数。

通过这个例子,不仅可以学习到有关双目运算符重载的知识,而且,还可以学习怎么样去编写C++程序。

 

以上是关于C++重载双目运算符的主要内容,如果未能解决你的问题,请参考以下文章

关于双目运算符的重载问题

运算符重载

复数类的运算

运算符重载

C++重载单目运算符

C++重载单目运算符