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++日志(三十九)教你如何以类的非静态成员函数形式重载运算符zhuanlan.zhihu.com 在C++中,同样可 ...
- c++重载(以运算符重载为主)
重载(OverLoading)是面向对象程序设计多态性的一种体现.所谓重载,是指"同一标识符"在同一作用域的不同场合具有不同的语义,这个标识符可以是函数名或运算符.也就是说,重载可 ...
- C++:运算符重载函数之成员运算符重载函数
5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式 ...
- C++运算符重载讲解与经典实例
转自:http://blog.csdn.net/dingyuanpu/article/details/5852825 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型 ...
- C++双目/单目运算符的重载
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105148178 双 ...
- C++学习笔记:(四)运算符重载 类型转换
目录 6.运算符重载 6.1运算符重载的基本概念 6.2成员函数重载运算符 6.3友元函数重载运算符 6.4成员函数重载运算符和友元函数重载运算符比较 6.5类型转换 6.运算符重载 面向对象程序设计 ...
- C++主要操作符重载的定义和总结
C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作.例如: class complex { public: complex(dou ...
- python次方运算_neg__python 魔术方法1 运算符重载
python中存在一些特殊的方法,这些方法通常采用格式:__method__().这些方法会在特定的情况下自动调用.例如:__new__().__init__().__del__() 等生命周期方法. ...
- 对运算符重载的函数2
//重载函数作为友元函数 #include <iostream> using namespace std; class complex { public:complex (){real=0 ...
最新文章
- 给定一个字符串,输出第一次出现k次的字母java,c++实现
- [转载] 中华典故故事(孙刚)——08 狗咬吕洞宾
- java中array_Java 中的array数组总结之一
- redis优雅的批量删除key
- 书脊开胶了用什么胶粘_画册印制1万本,结果一本不能用,这些问题你注意了吗...
- 页面左边导航固定,右边自适应宽度
- 类方法的实例python_Python Class 的实例方法/类方法/静态方法
- 显示控制器注释_欧姆龙可编程控制器CS1D-CPU产品型号说明及功能介绍
- linux 通配符与正则表达式
- Bailian2734 十进制到八进制【入门】(POJ NOI0113-45)
- 欢迎使用CSDN-markdown编辑器--样例
- c语言变量报存在bss段,浅谈c语言代码段 数据段 bss段
- 机器学习相关数据库(转)
- 第二周练习 委派任务
- 微信小程序滴滴服务器报错,如何使用mpx框架(滴滴)给微信小程序分包
- Spring Cloud Zuul API 网关服务
- 关于樱桃键盘锁定alt键和win键这件事
- Vue基于python的用户兴趣的电影视频播放推荐系统django
- Beta阶段展示博客
- 浅谈人机交互设计系统