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

用DW做的网站生成链接最新清远发布

用DW做的网站生成链接,最新清远发布,团购做的比较好的网站,cms 企业author: hjjdebug date: 2025年 05月 17日 星期六 14:44:48 CST descrip: c函数调用运算符及类型转换运算符重载 文章目录 0. 前言. 运算符包括以下运算符.1. 运算符重载语句一般格式:2. 函数调用运算符:3. 类型转换运算符: 例如 int(); double(); bool(…

author: hjjdebug
date: 2025年 05月 17日 星期六 14:44:48 CST
descrip: c++函数调用运算符及类型转换运算符重载


文章目录

  • 0. 前言. 运算符包括以下运算符.
  • 1. 运算符重载语句一般格式:
  • 2. 函数调用运算符:
  • 3. 类型转换运算符: 例如 int(); double(); bool();
  • 4. 测试代码

0. 前言. 运算符包括以下运算符.

算术运算符:
关系运算符:
逻辑运算符:
位运算符:
赋值运算符:
下标运算符:
成员访问运算符:
函数调用运算符:
类型转换运算符:

operator 关键字, 可以重载现有的运算符.可定义在类内,也可定义在类外
运算符的优先级和结合性保持不变.
不能创建新的运算符,只能重载现有运算符

1. 运算符重载语句一般格式:

返回值类型 operator 运算符(参数列表) [const] {函数体}
看出来了,运算符就是一类函数. 运算符就等价于函数名.
所以obj.函数名(参数列表)形式的调用 演变为obj运算符(函数列表)调用, 省略了"."

重点介绍2类运算符:

2. 函数调用运算符:

运算符()(也称为函数调用运算符)
我们重载了这个操作符,就可以用obj(参数列表)来执行对应的函数体代码了.
好处就是不用为这堆函数体起名字了,名字就是运算符.写起来还切且,看多了还顺眼.
这与通常的func(参数列表)形式一致,
所以把这个obj叫做函数对象或仿函数
举例:
struct Test1 {
// 重载()运算符
constexpr bool operator()() const noexcept {return true;}
int operator()(int a, int b) const {
return a + b;
}
};
调用:
Test1 obj1;
bool b1=obj1();
int i1=obj1(2,3);
在这里,obj1不是函数,而是个Test1类的对象.

3. 类型转换运算符: 例如 int(); double(); bool();

c++中显式的类型转换是static_cast、dynamic_cast、和reinterpret_cast。
不过,类还可通过定义operator type()实现到其他类型的转换:
自定义的转换更灵活! 转换的规则由自己定义.
类型转换运算符可以根据不同的上下文环境自动完成类型转换.
我们举个例子,将类的类型自动转换为bool 和自动转换为double 类型.
与普通的运算符重载相比, 运算符前边不用定义返回类型了, 因为返回类型放到了运算符符后面.
举例: //完整代码在后面
struct Rational
{
Rational(int num=0,int den=0):_num(num),_den(den){} //构造函数
constexpr operator bool() const noexcept {return _num!=0;}
constexpr operator double() const noexcept {return (double)_num/_den;}
private:
int _num;
int _den;
};

用constexpr修饰, 是说把代码执行提前到编译期.把计算结果优化到调用代码里
这样运行的时候不用再调用这个函数来计算,函数早被优化没了,属于优化操作的考虑.
去掉它也没啥关系,可能运行稍微慢一点.

使用:
在判断语句中,其上下文是判断返回值是真或假. 例: if(obj) {}
赋值语句,其上下文是隐式转换为目的类型. 例: double d= obj;

4. 测试代码

$ cat main.cpp
#include <iostream>
//operator 关键字, 可定义在类内,也可定义在类外,本例演示的是类内重载.
//operator 后接运算符号
//运算符的优先级和结合性保持不变.
//不能创建新的运算符,只能重载现有运算符
// 运算符()(也称为函数调用运算符)可以使一个类的对象表现得像函数一样,也称为仿函数
// 一般成员函数的调用是通过对象名.函数名(...)来调用的.  而运算符还是那个运算符,只是表现不一样了.
struct Test1 {constexpr bool operator()() const noexcept {return true;}// 重载()运算符int operator()(int a, int b) const {return a + b;}
};struct Test2 {constexpr operator bool() const noexcept {return true;}
};struct Rational 
{Rational(int num=0,int den=0):_num(num),_den(den){}explicit constexpr operator bool() const noexcept {return _num!=0;} constexpr operator double() const noexcept {return (double)_num/_den;}
private:	int _num;int _den;
};
int main() {Test1 t1;//t1对象有函数调用重载if(t1()) {}      // 需要显式调用,获取其返回值int a1=t1(2,3);printf("a1:%d\n",a1);//t2对象会隐式调用Rational t2(3,5);bool b2 = t2;    // 赋值操作,调用了隐式类型转换, double d2=t2;printf("b2:%d,d2:%f\n",b2,d2);if(t2) {}        // 因if需要bool返回值,所以调用了隐式转换.
}

输出结果:
./temp
a1:5
b2:1,d2:0.600000

本博用实例演示了c++中对函数调用运算符及类型转换运算符的重载.
重载就是重新定义了它的实现.

http://www.dtcms.com/wzjs/497147.html

相关文章:

  • seo教程技术淘宝seo是什么意思啊
  • 深圳微商城网站制作费用百度账号中心官网
  • 佛山建网站常熟seo网站优化软件
  • 涟源网站建设网站维护的主要内容
  • 咸阳免费做网站公司网址检测
  • 中核工建设集团OA网站企业营销案例
  • 互助县wap网站建设公司cpc广告点击日结联盟
  • 如何利用网站新闻做推广数据分析师就业前景
  • 北京网站制作公司报价seo快速排名优化
  • 通用网站建设需求分析阳西网站seo
  • jz做网站三亚百度推广开户
  • 制作个人业务网站油烟机seo关键词
  • 淘客怎么做网站百度竞价排名查询网站
  • 南岸网站建设北京专业seo公司
  • 海口制作网站企业2022年最火的关键词
  • 网站建设到维护友情链接交换网
  • iis5.1怎么发布网站重庆森林粤语完整版在线观看免费
  • 网站设计版式重庆黄埔seo整站优化
  • 湖北去哪做经营性网站备案网站关键词推广
  • 怎么在虚拟空间做两个网站百度账号快速注册入口
  • 四川住房和城乡建设厅网站不能进入广州seo推广
  • 网站建站的尺寸专业网店推广
  • 做影视网站难吗seo网站推广专员招聘
  • 公益事业做网站线上推广方案
  • 西宁网站建设公司排名软件
  • 用dedecms做的网站百度搜索引擎推广收费标准
  • 备案的网站必须打开吗苏州seo关键词排名
  • 电商网站设计方法百度入口提交
  • 一个用户注册的网站怎么做福州seo公司
  • 校园二手书交易网站开发整合营销传播工具有哪些