重载双目运算符

双目运算符(或称 二元运算符)是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++重载双目运算符相关推荐

  1. 中双目运算符_C++日志(四十)教你如何以非成员函数的形式重载运算符

    上一篇日志中讲述了如何通过类的非静态函数成员,进行运算符重载: 机器学习入坑者:C++日志(三十九)教你如何以类的非静态成员函数形式重载运算符​zhuanlan.zhihu.com 在C++中,同样可 ...

  2. c++重载(以运算符重载为主)

    重载(OverLoading)是面向对象程序设计多态性的一种体现.所谓重载,是指"同一标识符"在同一作用域的不同场合具有不同的语义,这个标识符可以是函数名或运算符.也就是说,重载可 ...

  3. C++:运算符重载函数之成员运算符重载函数

    5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式 ...

  4. C++运算符重载讲解与经典实例

    转自:http://blog.csdn.net/dingyuanpu/article/details/5852825 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型 ...

  5. C++双目/单目运算符的重载

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105148178 双 ...

  6. C++学习笔记:(四)运算符重载 类型转换

    目录 6.运算符重载 6.1运算符重载的基本概念 6.2成员函数重载运算符 6.3友元函数重载运算符 6.4成员函数重载运算符和友元函数重载运算符比较 6.5类型转换 6.运算符重载 面向对象程序设计 ...

  7. C++主要操作符重载的定义和总结

    C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作.例如:  class complex  {   public:    complex(dou ...

  8. python次方运算_neg__python 魔术方法1 运算符重载

    python中存在一些特殊的方法,这些方法通常采用格式:__method__().这些方法会在特定的情况下自动调用.例如:__new__().__init__().__del__() 等生命周期方法. ...

  9. 对运算符重载的函数2

    //重载函数作为友元函数 #include <iostream> using namespace std; class complex { public:complex (){real=0 ...

最新文章

  1. 给定一个字符串,输出第一次出现k次的字母java,c++实现
  2. [转载] 中华典故故事(孙刚)——08 狗咬吕洞宾
  3. java中array_Java 中的array数组总结之一
  4. redis优雅的批量删除key
  5. 书脊开胶了用什么胶粘_画册印制1万本,结果一本不能用,这些问题你注意了吗...
  6. 页面左边导航固定,右边自适应宽度
  7. 类方法的实例python_Python Class 的实例方法/类方法/静态方法
  8. 显示控制器注释_欧姆龙可编程控制器CS1D-CPU产品型号说明及功能介绍
  9. linux 通配符与正则表达式
  10. Bailian2734 十进制到八进制【入门】(POJ NOI0113-45)
  11. 欢迎使用CSDN-markdown编辑器--样例
  12. c语言变量报存在bss段,浅谈c语言代码段 数据段 bss段
  13. 机器学习相关数据库(转)
  14. 第二周练习 委派任务
  15. 微信小程序滴滴服务器报错,如何使用mpx框架(滴滴)给微信小程序分包
  16. Spring Cloud Zuul API 网关服务
  17. 关于樱桃键盘锁定alt键和win键这件事
  18. Vue基于python的用户兴趣的电影视频播放推荐系统django
  19. Beta阶段展示博客
  20. 浅谈人机交互设计系统

热门文章

  1. 让dedecms栏目页标题显示页码数
  2. DigiPCBA设计工具初体验!!!
  3. uniapp 简陋易懂版仿抖音视频播放
  4. 燕十八 mysql_布尔教育燕十八mysql优化视频课件源码分享
  5. 【Linux】Ubuntu 18.04桌面美化
  6. 人工智能基础之数学符号篇
  7. Matlab中出现“位置1处的索引超出数组边界(不能超过1)”
  8. Windows Office Word不支持Ctrl多选操作
  9. 人工智能Java SDK:中文翻译为英文
  10. 平方数列、立方数列求和公式与推导