重载符operator() -- effective c++ 3rd P71的的隐式类型转换及相关的研究
class的"operator 返回类型 ()" 的重载 就是对(class)的重载,这个重载符不用参数,参数就是自身,并且与函数传递的参数括号等价
如 func(c), 并且多个参数也适用 如 void func(class c, int i ) 等价 void func( (c), ( i ) )
class的 "operator()" 的重载 是对 class()的重载,两者不同。如 class(1), class(2) ……
#include <iostream>
using namespace std;
class C1{
public:
C1(int k):i(k){}
//(C1)的重载
operator int() const //int 是返回类型,此重载符函数将(C1)返回了一个int型数据,实现了隐式类型转换
{
return i;
}
//C1()的重载
const int& operator()(int i) const //这个重载符与上面是两个不同的重载符,
{ //有右值参数,返回一个不可改变的左值引用,防止出现类似 C1() = … 的代码
return i + 1;
}
//数据成员
int i;
};
int func(int c)//测试 函数参数形式的(C1)
{
return c;
}
int func(int c, int i)//测试多参数函数参数形式的 (C1)
{
return i;
}
int main(int argc, char *argv[])
{
C1 c(10), c1(12);
cout << c(1) << endl;//对c()的测试
int i = (c); //以下是对(c)的测试
cout << i << endl;
cout << func(c) << endl;
cout << func(c, 11) << endl;
cout << func(c, c1) << endl;
return 0;
}
上述代码是做的一个实验,输出为2 10 10 11 12
重载符operator() -- effective c++ 3rd P71的的隐式类型转换及相关的研究的更多相关文章
- c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast
C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换.对于操作符的重载,许多人都不陌生,但是估计不少人都不太熟悉operator的第二种用法,即自定义对象类型的隐式 ...
- 【M21】利用重载技术避免隐式类型转换
1.考虑UPint 的加法+,UPint a, b, result; 为了使result = a+10; result= 10+a; 都能通过编译,操作符重载如下: const UPint opera ...
- 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 操作符重载和隐式类型转换
C#中,某些类型会定义隐式类型转换和操作符重载.Unity中,有些对象也定义了隐式类型转换和操作符重载.典型情况有:UnityEngine.Object.UnityEngine.Object的销毁是调 ...
- operator用法:隐式类型转换
operator它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换). 1.操作符重载C++可以通过operator实现重 ...
- C++ 中operator用法:隐式类型转换
[转]C++ operator两种用法 C++,有时它的确是个耐玩的东东,就比如operator,它有两种用法,一种是operator overloading(操作符重载),一种是operator c ...
- C++ 语言中的重载、内联、缺省参数、隐式转换等机制展现了很多优点
C++ 语言中的重载.内联.缺省参数.隐式转换等机制展现了很多优点,但是这些 优点的背后都隐藏着一些隐患.正如人们的饮食,少食和暴食都不可取,应当恰到好处. 我们要辨证地看待 C++的新机制,应该恰如 ...
- Effective C++ -----条款41:了解隐式接口和编译期多态
classes和templates都支持接口(interface)和多态(polymorphism). 对classes而言接口是显式的(explicit),以函数签名为中心.多态则是通过virtua ...
- 【More Effective C++ 条款5】对定制的“类型转换函数”保持警觉
1)C++允许内置数据类型之间进行隐式转换,比如char转int,int转double,对于内置数据类型的转换有详细的规则,但不管怎么样,这些都是语言提供的,相对安全,而且我们无法更改 对于自定义类的 ...
- 类型转换运算符、*运算符重载、->运算符重载、operator new 和 operator delete
一.类型转换运算符 必须是成员函数,不能是友元函数 没有参数 不能指定返回类型 函数原型:operator 类型名(); C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
随机推荐
- django_apscheduler 0.4.0删除了name字段
使用django_apscheduler时默认使用了最新版本,为0.4.2版本,但是在这个版本中,使用migrate 生成定时任务模型时没有了name字段,导致之前写的定时任务不能执行. 翻了下 dj ...
- getchar()与putchar()
getchar() 用于读取用户从键盘输入的单个字符,它有一个整型的返回值,当发生读取错误的时候,返回整型值-1,当读取正确的时候,它会返回用户从键盘输的第一个字符的ASCII码, 当程序调用getc ...
- (入门)matlab中创建和调用m文件
大学学过的一款软件,说实话没好好学,老师直接讲到高深的做仿真之类的 综合网上的教程讲述基础的matlab创建遇到的问题: 参考: 1. https://blog.csdn.net/weixin_423 ...
- 翻了翻element-ui源码,发现一个很实用的指令clickoutside
前言 指令(directive)在 vue 开发中是一项很实用的功能,指令可以绑定到某一元素或组件,使功能的颗粒度更精细.今天在翻 element-ui 的源码时,发现一个还挺实用的工具指令,跟大伙分 ...
- Oracle 存储过程解锁及表解锁和停止执行
查看进程: select * from v$process; 根据存储过程名称查找是否被锁: select * FROM dba_ddl_locks where name =upper('sp_1') ...
- DBA提交脚步规范
工作中需要走脚步流程,申请修改数据库,总结一些常用的语句:)提交时注明为DDL/DML_需求号_日期(各公司标准不一样)//修改字段长度使用;alter table t_task modify tas ...
- 网站搭建-云服务器ECS-镜像管理
学习笔记: 快照,系统盘可创建镜像,数据盘不可以. 实例可以直接创建镜像,包括系统盘和数据盘 复制镜像: 新购服务器,选择镜像(又买). 共享镜像: 账号ID就是UID 云市场获取镜像; 1. 创建新 ...
- git冲突的表现
<<<<<<< HEAD b789 ======= b45678910 >>>>>>> 6853e5ff961e68 ...
- Python的逻辑控制true/false和循环
逻辑判断 简单的几个尝试,看下和java的一点不同之处 1 > 2 # False 1 < 2 <3 # True 42 != '42' # True 'Name' == 'name ...
- http请求需要了解的一些信息
http请求需要了解的一些信息 http请求头:https://jingyan.baidu.com/article/375c8e19770f0e25f2a22900.htmlhttp状态码 :http ...