当前位置: 首页 > news >正文

operator的两种用法(重载和隐式类型转换)

文章目录

  • 重载
  • 隐式类型转换
    • 构造函数的隐式类型转换
      • 补充
    • operator算子的隐式类型转换

重载

隐式类型转换

构造函数的隐式类型转换

利用operator进行的隐式类型转换成为operator算子的隐式类型转换,讲这个之前先了解构造函数的隐式类型转换,请看以下代码

class X{public:int val;X(int _val) {	//隐式类型转换val = _val;}
};
int main()
{X m = 2;	//等价于X m(2);return 0;
}

传入一个参数初始化类的构造函数就是构造函数的隐式类型转换,可以理解为将int类型转换为X(class)类型

补充

如果不想出现这种隐式类型转换,就可以用explict修饰
具体详解请看:explict详解

operator算子的隐式类型转换

而operator算子的隐式类型转换则是相反的,例如以下代码

#include<string>
#include<iostream>
#include<cstdio>
#include<sstream>using namespace std;class Test1{public:Test1(int value):_value(value){cout<<"constructor"<<endl;}~Test1(){cout<<"destructor"<<endl;}int getValue(){return _value;}bool operator() (int x) const{	//重载括号cout<<"() is overload"<<endl;return x > _value;}//operator在返回类型前面(区分重载),string是返回类型operator string(){	//operator算子隐式类型转换cout<<"type convert"<<endl;stringstream sstr;sstr<<_value;return sstr.str();}private:int _value;
};int main(){Test1 t(10);int i = 5;if(t(5))cout<<i<<" is greater than "<<t.getValue()<<endl;elsecout<<i<<" is less than "<<t.getValue()<<endl;string str(t); // 将Test1类型转换为string类型cout<<str<<endl;return 0;
}

Test1类型的对象传入string的构造函数,是用了c++构造函数的隐式类型转换特性,虽然string类并没有显式定义参数为Test1的构造函数,但因为其可以隐式转换为string,所以语法上都是合法的。

构造函数的隐式类型转换,是使用一个其他的类型构造当前类的临时对象并用此临时对象来构造当前对象,这种转换必须有构造函数的支持;

operator算子的隐式类型转换,使用当前对象去生成另一个类型的对象(正好与构造函数隐式转换相反),这种转换必须有operator算子的支持。

当然了,构造函数的隐式类型转换有利有弊,类的设计者就起决定性作用了,如果你不想让构造函数发生隐式的类型转换,请在构造函数前加explicit关键字;同时,operator算子声明的隐式类型转换也可以通过一些相应的返回值函数替代,用户的掌控性更好。

http://www.lryc.cn/news/5730.html

相关文章:

  • vue常用指令
  • MATLAB | 有关数值矩阵、颜色图及颜色列表的技巧整理
  • C++模板元编程详细教程(之九)
  • PhysioNet2017分类的代码实现
  • 正大期货本周财经大事抢先看
  • html+css综合练习一
  • 安装jdk8
  • 二分法心得
  • Linux安装Docker完整教程
  • 备份基础知识
  • C++学习记录——팔 内存管理
  • Spring事务失效原因分析解决
  • 4个月的测试经验,来面试就开口要17K,面试完,我连5K都不想给他.....
  • python学习之pyecharts库的使用总结
  • 【taichi】利用 taichi 编写深度学习算子 —— 以提取右上三角阵为例
  • 二进制 k8s 集群下线 worker 组件流程分析和实践
  • Bean的六种作用域
  • Http发展历史
  • 高级Java程序员必备的技术点,你会了吗?
  • 【暴力量化】查找最优均线
  • Java读取mysql导入的文件时中文字段出现�??的乱码如何解决
  • k8s核心概念—Pod Controller Service介绍——20230213
  • Tensorflow的数学基础
  • IT培训就是“包就业”吗?内行人这么看
  • 【算法】【数组与矩阵模块】顺时针旋转打印矩阵
  • Java中的锁概述
  • 微电影行业痛点解决方案
  • 使用Spring框架的好处是什么
  • 【表格单元格可编辑】vue-elementul简单实现table表格点击单元格可编辑,点击单元格变成弹框修改数据
  • vue3.0 响应式数据