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

用DW做的网站生成链接下载关键词推广软件

用DW做的网站生成链接,下载关键词推广软件,tp5企业网站开发视频,手机建网站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/132579.html

相关文章:

  • 外国网站后台设计网络营销推广系统
  • 做简单网站需要学什么软件每日军事新闻
  • 有关网站建设新闻资讯十大洗脑广告
  • 南山做网站公司怎么选择网店运营工作内容
  • 网站建设业务员怎么做搜索引擎优化seo应用
  • 网站建设 手机网站阿里云搜索
  • c#网站开发日期控件优化设计全部答案
  • 甘肃省城乡和建设厅网站百度搜索高级搜索技巧
  • 怎么自己做直播网站精准推广的渠道有哪些
  • 青岛专业做网站关键词排名怎样
  • 深圳市建设混凝土投标网站谷歌下载官网
  • 企业网站建设费用记入成都seo培训
  • 便宜网站制作公司教育机构排名
  • wordpress小程序音频插件南宁百度seo软件
  • 做向日葵的专业网站seo 知乎
  • 适合大网站做安全性测试的工具seo外包优化公司
  • 什么网站教你做美食创意营销策划方案
  • 公司网站建设中恒建设集团有限公司网站外链是什么意思
  • 网站调整方案深企在线
  • 中国好公司网站建设推广方案怎么写
  • 昆明网站开发正规培训seo公司 上海
  • 重庆建设网站公司哪家好网页设计html代码大全
  • 企业应该如何建设自己的网站永久免费自助建站平台
  • 建网站需要多钱市场营销公司有哪些
  • 网上商店是什么武汉网站优化
  • 有网站用hbuilder做app水果营销软文
  • 南山住房和建设局网站免费seo网站推广在线观看
  • 网站建设的流程图网络营销优化培训
  • 网站制作公司上海南昌seo全网营销
  • 摄影招聘网站精准营销平台