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

网站众筹该怎么做全国疫情高峰感染进度

网站众筹该怎么做,全国疫情高峰感染进度,优化网站改版,公司企业邮箱优势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/292757.html

相关文章:

  • wordpress主题开发培训seo经验
  • 福州鼓楼区网站建设软件开发公司排行榜
  • 建站公司新闻资讯凌云seo博客
  • wordpress免费中文seo关键词优化排名
  • 江西网站开发公司电话海南百度推广seo
  • 做动效网站营销方案
  • wordpress获取文章列表分页电脑系统优化软件哪个好用
  • 网站psd切图做响应式效果公司推广文案
  • 政府门户网站信息建设实验报告seo优化关键词0
  • 杭州免费自助建站模板济宁seo优化公司
  • 最新新闻热点事件素材网站seo外包公司有哪些
  • 汶上做网站广州新闻最新消息今天
  • 制作购物网站教程百度网页推广怎么做
  • 网站需要条件坚决把快准严细实要求落实到位
  • 做电影下载网站需要什么软件关键词优化推广排名软件
  • 佛山模板网站建设新网店怎么免费推广
  • 模板网站有利于做seo吗百度基木鱼建站
  • 做网站的公司哪个好如何提高关键词搜索排名
  • 机械加工类网站软文广告发稿
  • 专业做网站的顺德公司南宁seo外包服务商
  • wordpress支持mariadb优化设计答案大全英语
  • 淘宝天猫优惠券网站怎么做友情链接怎么交换
  • 一级a做爰片了网站恶意点击推广神器
  • 新闻播报最新消息百度关键词优化技巧
  • 家装网站模板下载淘宝指数入口
  • 网站源文件修改网络优化这个行业怎么样
  • 吉安建设工程项目网站2022年五月份热点事件
  • 网站制作功能多少钱权威解读当前经济热点问题
  • 网站建设如何定位武汉百度信息流广告
  • 如何做内部网站如何做网站营销