
正文
【C++知识汇总】运营商 & 运算符重载
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
【运算符】
在进行运算时,假设右括号的话我们知道先运算哪个,那假设没有括号了。算术运算符,关系运算符,逻辑运算符,位运算符。赋值运算符,++、--运算符等等,那么多的运算符。我们先算哪边。也就是这些运算符的优先级怎么排序呢?
| 优先级 | 操作符 | 描写叙述 | 样例 | 结合性 |
|---|---|---|---|---|
| 1 | () [] -> . :: ++ -- | 调节优先级的括号操作符 数组下标訪问操作符 通过指向对象的指针訪问成员的操作符 通过对象本身訪问成员的操作符 作用域操作符 后置自增操作符 后置自减操作符 | (a + b) / 4; array[4] = 2; ptr->age = 34; obj.age = 34; Class::age = 2; for( i = 0; i < 10; i++ ) ... for( i = 10; i > 0; i-- ) ... | 从左到右 |
| 2 | ! ~ ++ -- - + * & (type) sizeof | 逻辑取反操作符 按位取反(按位取补) 前置自增操作符 前置自减操作符 一元取负操作符 一元取正操作符 解引用操作符 取地址操作符 类型转换操作符 返回对象占用的字节数操作符 | if( !done ) ... flags = ~flags; for( i = 0; i < 10; ++i ) ... for( i = 10; i > 0; --i ) ... int i = -1; int i = +1; data = *ptr; address = &obj; int i = (int) floatNum; int size = sizeof(floatNum); | 从右到左 |
| 3 | ->* .* | 在指针上通过指向成员的指针訪问成员的操作符 在对象上通过指向成员的指针訪问成员的操作符 | ptr->*var = 24; obj.*var = 24; | 从左到右 |
| 4 | * / % | 乘法操作符 除法操作符 取余数操作符 | int i = 2 * 4; float f = 10 / 3; int rem = 4 % 3; | 从左到右 |
| 5 | + - | 加法操作符 减法操作符 | int i = 2 + 3; int i = 5 - 1; | 从左到右 |
| 6 | << >> | 按位左移操作符 按位右移操作符 | int flags = 33 << 1; int flags = 33 >> 1; | 从左到右 |
| 7 | < <= > >= | 小于比較操作符 小于或等于比較操作符 大于比較操作符 大于或等于比較操作符 | if( i < 42 ) ... if( i <= 42 ) ... if( i > 42 ) ... if( i >= 42 ) ... | 从左到右 |
| 8 | == != | 等于比較操作符 不等于比較操作符 | if( i == 42 ) ... if( i != 42 ) ... | 从左到右 |
| 9 | & | 按位与操作符 | flags = flags & 42; | 从左到右 |
| 10 | ^ | 按位异或操作符 | flags = flags ^ 42; | 从左到右 |
| 11 | | | 按位或操作符 | flags = flags | 42; | 从左到右 |
| 12 | && | 逻辑与操作符 | if( conditionA && conditionB ) ... | 从左到右 |
| 13 | || | 逻辑或操作符 | if( conditionA || conditionB ) ... | 从左到右 |
| 14 | ? : | 三元条件操作符 | int i = (a > b) ? a : b; | 从右到左 |
| 15 | = += -= *= /= %= &= ^= |= <<= >>= | 赋值操作符 复合赋值操作符(加法) 复合赋值操作符(减法) 复合赋值操作符(乘法) 复合赋值操作符(除法) 复合赋值操作符(取余) 复合赋值操作符(按位与) 复合赋值操作符(按位异或) 复合赋值操作符(按位或) 复合赋值操作符(按位左移) 复合赋值操作符(按位右移) | int a = b; a += 3; b -= 4; a *= 5; a /= 2; a %= 3; flags &= new_flags; flags ^= new_flags; flags |= new_flags; flags <<= 2; flags >>= 2; | 从右到左 |
| 16 | , | 逗号操作符 | for( i = 0, j = 0; i < 10; i++, j++ ) ... | 从左到右 |
额,表格上这么多。还有同样表示的,比如。&既能够作为取地址操作符又能够作为位与操作符。瞬间晕啦。
咱们来分析一下,将这个表格变简单。
首先,看结合性。分为两种:从左到右(大部分),从右到左。
然后,再看优先级。一个最高,一个最低。最低的就是逗号,这个方便记忆,那最高的呢,有什么共同点?就是构造类型元素或成员以及括号。(这点还有些疑问)
其次。运算符依据操作数,是不是分为单目,双目,三目运算符。
在表中。优先级为2的为单目运算符,优先级为3~13的为双目运算符。优先级为14的为三目运算符。优先级为15的为赋值运算符。
但是双目运算符中还分好多级呢,这怎么办?接着看呗!3算作指针訪问成员运算符,4~5为算术运算符(先“乘除取余”后“加减”),6为移位操作符。7~8为关系运算符(先比大小,后算相等)。9~11为逻辑位操作符(先“与”后“或”。“异或”放中间),12~13为逻辑操作符(先“与”后“或”)。
也就是,算术。关系。逻辑。移位,逻辑位按序插入当中。
最后。C++运算符优先级为:一个最高(构造类型的元素或成员以及括号);一个最低(逗号)。指针訪问成员排老三。一,二。三,赋值。双目运算符。算术关系逻辑,移位、逻辑位按序插入当中。
【运算符重载】
运算符重载是面向对象中多态性的表现,是一种使用同一个运算符作用于不同类型的数据会有不同的行为的机制。1、运算符重载条件:(除5种运算符外。其它均可重载)
. 成员选择运算符.* 成员指针运算符:: 作用于分辨符?; 条件运算符sizeof 计算数据大小运算符
这几种运算符也是属于比較特殊的一类。(成员选择 条件是 作用于指针的运算符来计算数据大小)
2、运算符重载规则(1不能,3不变)
(1)1不能:不能重载C++中没有的运算符
(2)3不变:原操作个数。原语义。原优先级和结合性。
3、运算符函数重载两种形式
(1)重载为类的友元函数
friend 函数类型 operator 运算符(形參表){函数体;}
(2)重载为类的成员函数
返回类型 (类名:: )operator
运算符(形參表){函数体;}
(3)比較
成员函数:单目运算符,类型转换函数,运算符操作改动对象。友元函数:双目运算符。操作数隐式类型转换,运算具有可交互性。注意:双目运算符=,[ ],(),—>不能重载为类的友元函数。
【总结】
对于C++真题上的操作题。看到运算符多的往往不知道先算哪边的,如今总结一下,有利于提高做题的效率。在我做过的题其中,运算符重载一般出在选择题上。
事实上,对运算符优先级的记忆是上网查的。然后自己分析的。这使我明确,不管看到多么多的知识。仅仅要你找就一定能找到联系的,而且可以编织属于你的知识网。
所以。遇到困难。不要怕,从多角度分析一点点,一切都可以解决。
版权声明:本文博主原创文章,博客,未经同意不得转载。
1、运算符重载条件:(除5种运算符外。其它均可重载)
. 成员选择运算符
.* 成员指针运算符
:: 作用于分辨符
?; 条件运算符
sizeof 计算数据大小运算符
这几种运算符也是属于比較特殊的一类。
(成员选择 条件是 作用于指针的运算符来计算数据大小)
2、运算符重载规则(1不能,3不变)
(1)1不能:不能重载C++中没有的运算符
(2)3不变:原操作个数。原语义。原优先级和结合性。
3、运算符函数重载两种形式
(1)重载为类的友元函数
friend 函数类型 operator 运算符(形參表){函数体;}
(2)重载为类的成员函数
返回类型 (类名:: )operator
运算符(形參表){函数体;}
运算符(形參表){函数体;}
(3)比較
成员函数:单目运算符,类型转换函数,运算符操作改动对象。
友元函数:双目运算符。操作数隐式类型转换,运算具有可交互性。
注意:双目运算符=,[ ],(),—>不能重载为类的友元函数。
对于C++真题上的操作题。看到运算符多的往往不知道先算哪边的,如今总结一下,有利于提高做题的效率。在我做过的题其中,运算符重载一般出在选择题上。
事实上,对运算符优先级的记忆是上网查的。然后自己分析的。
这使我明确,不管看到多么多的知识。仅仅要你找就一定能找到联系的,而且可以编织属于你的知识网。
所以。遇到困难。不要怕,从多角度分析一点点,一切都可以解决。
版权声明:本文博主原创文章,博客,未经同意不得转载。
【C++知识汇总】运营商 & 运算符重载的更多相关文章- C/C++编程笔记:C++入门知识丨运算符重载
本篇要学习的内容和知识结构概览 运算符重载使用场景 常规赋值操作 我们现在有一个类 想要实现这种赋值操作 具体实现如下: 所以说呢,我们在使用运算符进行运算的时候, 实际上也是通过函数来实现运算的. ...
- C++ Primer笔记10_运算符重载_赋值运算符_进入/输出操作符
1.颂值运营商 首先来福值运算符引入后面要说的运算符重载.上一节说了构造函数.拷贝构造函数:一个类要想进行更好的控制.须要定义自己的构造函数.拷贝构造函数.析构函数.当然,还有赋值运算符.常说的三大函 ...
- 【足迹C++primer】49、超载,变化,运营商
超载,变化,运营商 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function typ ...
- 沉淀,再出发:Java基础知识汇总
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
- 【足迹C++primer】49、超载,更改,运营商
超载,更改.运营商 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function typ ...
- C++运算符重载
C++运算符重载 基本知识 重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和其后要定义的运算符号共同组成. 运算符可以重载为成员函数和非成员函数.当一个重载的运算符是成员函数时, ...
- CSP -- 运营商内容劫持(广告)的终结者
缘由 我们公司最近手机端H5 经常受到商户和用户的投诉,说有广告并且导致不能正常进行操作,我们商户自己当然不会加广告了,但是商户和用户可不管这些了,就认为是我们的问题 探索发现根本 目前我们用的很多浏 ...
- C++学习笔记之运算符重载
一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...
- C++之运算符重载(1)
在前一节中曾提到过,C++中运行时的多态性主要是通过虚函数来实现的,而编译时的多态性是由函数重载和运算符重载来实现的.这一系列我将主要讲解C++中有关运算符重载方面的内容.在每一个系列讲解之前,都会有 ...
随机推荐- AngularJs之三
一.angularJs的指令模型ng-model指令 ng-model 指令 绑定 HTML 元素 到应用程序数据. 为应用程序数据提供类型验证(number.email.required).为应用程 ...
- java stopwatch 功能
C#中有一个stopwatch的功能,主要是用来监测程序执行时间的.java之前一直都在用如下方式完成: public static void main(String[] args) { long s ...
- Java学习笔记 01 基本数据类型、标识符、关键字和运算符
一.基本数据类型 基本数据类型 数据类型 内存空间(8位等于1字节) 取值范围 备注 byte 8位 -128~127 short 16位 -32768~32767 int 32位 -2147 ...
- 通过dubbo暴露接口调用方法,及基于zookeeper的dubbo涉及配置文件
现在很流行的Dubbo很多朋友都听说过吧,最近我也在看这方面的东西,分享先我的心得笔记. 先说说我们团队要做的项目框架,很简单重在实现基于zookeeper的dubbo注册. 框架:springmvc ...
- 并发工具类:CountDownLatch、CyclicBarrier、Semaphore
在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch ...
- ”Metro UI之磁贴(二)
也来“玩”Metro UI之磁贴(二) 继昨天的“也来“玩”Metro UI之磁贴(一)”之后,还不过瘾,今天继续“玩”吧——今天把单选的功能加进来,还有磁贴的内容,还加了发光效果(CSS3,IE9+ ...
- keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore
通过Android Studio编译器获取SHA1 第一步.打开Android Studio的Terminal工具 第二步.输入命令:keytool -v -list -keystore keysto ...
- 通过端口映射连接不同网段的oracle
oracle在内网,只有特殊机器能访问,通过做端口映射,可以以这个特殊机器作为“跳板”完成本机对远程oracle的连接. “跳板”机器是windows,需要在该机器上执行netsh命令: netsh ...
- [转载]AngularJS 指令 用法
http://book.2cto.com/201312/37782.html http://www.itnose.net/detail/6144038.html http://www.cnblogs. ...
- DESeq2包
1)简介: DESeq2-package: for differential analysis of count data(对count data 做差异分析) 2)安装 if("DESeq ...
本篇要学习的内容和知识结构概览 运算符重载使用场景 常规赋值操作 我们现在有一个类 想要实现这种赋值操作 具体实现如下: 所以说呢,我们在使用运算符进行运算的时候, 实际上也是通过函数来实现运算的. ...
1.颂值运营商 首先来福值运算符引入后面要说的运算符重载.上一节说了构造函数.拷贝构造函数:一个类要想进行更好的控制.须要定义自己的构造函数.拷贝构造函数.析构函数.当然,还有赋值运算符.常说的三大函 ...
超载,变化,运营商 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function typ ...
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
超载,更改.运营商 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function typ ...
C++运算符重载 基本知识 重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和其后要定义的运算符号共同组成. 运算符可以重载为成员函数和非成员函数.当一个重载的运算符是成员函数时, ...
缘由 我们公司最近手机端H5 经常受到商户和用户的投诉,说有广告并且导致不能正常进行操作,我们商户自己当然不会加广告了,但是商户和用户可不管这些了,就认为是我们的问题 探索发现根本 目前我们用的很多浏 ...
一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...
在前一节中曾提到过,C++中运行时的多态性主要是通过虚函数来实现的,而编译时的多态性是由函数重载和运算符重载来实现的.这一系列我将主要讲解C++中有关运算符重载方面的内容.在每一个系列讲解之前,都会有 ...
- AngularJs之三
一.angularJs的指令模型ng-model指令 ng-model 指令 绑定 HTML 元素 到应用程序数据. 为应用程序数据提供类型验证(number.email.required).为应用程 ...
- java stopwatch 功能
C#中有一个stopwatch的功能,主要是用来监测程序执行时间的.java之前一直都在用如下方式完成: public static void main(String[] args) { long s ...
- Java学习笔记 01 基本数据类型、标识符、关键字和运算符
一.基本数据类型 基本数据类型 数据类型 内存空间(8位等于1字节) 取值范围 备注 byte 8位 -128~127 short 16位 -32768~32767 int 32位 -2147 ...
- 通过dubbo暴露接口调用方法,及基于zookeeper的dubbo涉及配置文件
现在很流行的Dubbo很多朋友都听说过吧,最近我也在看这方面的东西,分享先我的心得笔记. 先说说我们团队要做的项目框架,很简单重在实现基于zookeeper的dubbo注册. 框架:springmvc ...
- 并发工具类:CountDownLatch、CyclicBarrier、Semaphore
在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch ...
- ”Metro UI之磁贴(二)
也来“玩”Metro UI之磁贴(二) 继昨天的“也来“玩”Metro UI之磁贴(一)”之后,还不过瘾,今天继续“玩”吧——今天把单选的功能加进来,还有磁贴的内容,还加了发光效果(CSS3,IE9+ ...
- keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore
通过Android Studio编译器获取SHA1 第一步.打开Android Studio的Terminal工具 第二步.输入命令:keytool -v -list -keystore keysto ...
- 通过端口映射连接不同网段的oracle
oracle在内网,只有特殊机器能访问,通过做端口映射,可以以这个特殊机器作为“跳板”完成本机对远程oracle的连接. “跳板”机器是windows,需要在该机器上执行netsh命令: netsh ...
- [转载]AngularJS 指令 用法
http://book.2cto.com/201312/37782.html http://www.itnose.net/detail/6144038.html http://www.cnblogs. ...
- DESeq2包
1)简介: DESeq2-package: for differential analysis of count data(对count data 做差异分析) 2)安装 if("DESeq ...






