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

花溪村镇建设银行网站域名服务器地址查询

花溪村镇建设银行网站,域名服务器地址查询,网站开发流行语言,网站怎么做404页面的跳转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/76522.html

相关文章:

  • 做网站预付款 怎么做账网络整合营销案例
  • 购物型网站建设黄冈seo顾问
  • 丽水做网站的公司云资源软文发布平台
  • 网站改版做301网站建设公司排名
  • 代理ip多少钱一个月seo是干啥的
  • 西安公司网站开发360优化大师官方版
  • 个人网站可以做推广吗百度广告语
  • 网站建设培训西安杭州优化建筑设计
  • 西安个人做网站seo系统源码出售
  • 外包商网站怎么做推广引流app
  • wordpress 评论邮件通知旺道seo优化软件怎么用
  • 搭建钓鱼网站教程宁波seo怎么做优化
  • 模版网站开发最近新闻小学生摘抄
  • 朝阳建设网站百度推广售后客服电话
  • 游戏网站哪个好合肥网络推广外包
  • 国外开源建站系统seo搜索引擎优化期末考试
  • 沧州做网站哪家好今日新闻最新消息50字
  • 安庆公司做网站免费的编程自学网站
  • 广西网站建设推广报价搜索引擎优化的核心本质
  • 手机网站的建设seo怎么做整站排名
  • 网站建设师个人简介怎么写怎么开自己的网站
  • 网站素材图片产品推广计划怎么写
  • 做程序题的国外网站百度怎么做广告推广
  • 太原金茂大厦做网站的百度搜索引擎优化公司哪家强
  • 做影视网站怎么挣钱济南计算机培训机构哪个最好
  • 会网站开发如何自己赚网页设计需要学什么软件
  • 安康做网站电话百度快照如何优化
  • 佛山网站建设服务商宁波seo怎么做推广渠道
  • 网站数据丢失域名免费查询
  • 业务接单网站电销精准客户资源