【运算符】



       在进行运算时,假设右括号的话我们知道先运算哪个,那假设没有括号了。算术运算符,关系运算符,逻辑运算符,位运算符。赋值运算符,++、--运算符等等,那么多的运算符。我们先算哪边。也就是这些运算符的优先级怎么排序呢?

优先级 操作符 描写叙述 样例 结合性
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++真题上的操作题。看到运算符多的往往不知道先算哪边的,如今总结一下,有利于提高做题的效率。在我做过的题其中,运算符重载一般出在选择题上。

        事实上,对运算符优先级的记忆是上网查的。然后自己分析的。

这使我明确,不管看到多么多的知识。仅仅要你找就一定能找到联系的,而且可以编织属于你的知识网。

所以。遇到困难。不要怕,从多角度分析一点点,一切都可以解决。

版权声明:本文博主原创文章,博客,未经同意不得转载。

【C++知识汇总】运营商 &amp; 运算符重载的更多相关文章

  1. C/C++编程笔记:C++入门知识丨运算符重载

    本篇要学习的内容和知识结构概览 运算符重载使用场景 常规赋值操作 我们现在有一个类 想要实现这种赋值操作 具体实现如下: 所以说呢,我们在使用运算符进行运算的时候, 实际上也是通过函数来实现运算的. ...

  2. C++ Primer笔记10_运算符重载_赋值运算符_进入/输出操作符

    1.颂值运营商 首先来福值运算符引入后面要说的运算符重载.上一节说了构造函数.拷贝构造函数:一个类要想进行更好的控制.须要定义自己的构造函数.拷贝构造函数.析构函数.当然,还有赋值运算符.常说的三大函 ...

  3. 【足迹C++primer】49、超载,变化,运营商

    超载,变化,运营商 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function typ ...

  4. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  5. 【足迹C++primer】49、超载,更改,运营商

    超载,更改.运营商 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function typ ...

  6. C++运算符重载

    C++运算符重载 基本知识 重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和其后要定义的运算符号共同组成. 运算符可以重载为成员函数和非成员函数.当一个重载的运算符是成员函数时, ...

  7. CSP -- 运营商内容劫持(广告)的终结者

    缘由 我们公司最近手机端H5 经常受到商户和用户的投诉,说有广告并且导致不能正常进行操作,我们商户自己当然不会加广告了,但是商户和用户可不管这些了,就认为是我们的问题 探索发现根本 目前我们用的很多浏 ...

  8. C++学习笔记之运算符重载

    一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...

  9. C++之运算符重载(1)

    在前一节中曾提到过,C++中运行时的多态性主要是通过虚函数来实现的,而编译时的多态性是由函数重载和运算符重载来实现的.这一系列我将主要讲解C++中有关运算符重载方面的内容.在每一个系列讲解之前,都会有 ...

随机推荐

  1. pygame系列_font游戏字体

    在pygame游戏开发中,一个友好的UI中,漂亮的字体是少不了的 今天就给大伙带来有关pygame中字体的一些介绍说明 首先我们得判断一下我们的pygame中有没有font这个模块 1 if not ...

  2. ACdream: Sum

    Sum Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatisticN ...

  3. 使用装饰器模式动态设置Drawable的ColorFilter

    使用装饰器模式动态设置Drawable的ColorFilter 欢迎各位关注我的新浪微博:微博 转载请标明出处(kifile的博客) 非常多时候我们都希望Android控件点击的时候,有按下效果,选中 ...

  4. windows phone (24) Canvas元素A

    原文:windows phone (24) Canvas元素A Canvas元素表示定制一个区域,并可以通过相对坐标定义子元素位置,在一下情况下Canvas是不可见的 Height 属性等于 0. W ...

  5. [Unity3D]转让Android介面

    简单介绍 有一些手机功能.Unity没有提供对应的接口.比如震动,比如不锁屏,比如GPS.比如... 有太多的特殊功能Unity都没有提供接口.这时候,我们就须要通过使用Android原生的ADT编辑 ...

  6. 潜水 java类加载器ClassLoader

    类加载器(class loader)用于装载 Java 类到 Java 虚拟机中.一般来说.Java 虚拟机使用 Java 类的方式例如以下:Java 源程序(.java 文件)在经过 Java 编译 ...

  7. Android规范发展

    一.Android 编码规范 1.java 代码中不出现中文.最多凝视中能够出现中文 2.局部变量命名.静态成员变量命名 仅仅能包括字母,单词首字母出第一个外,都为大写,其它字母都为小写 3.常量命名 ...

  8. 一起学习android图片四舍五入图片集资源 (28)

    效果图: 參看下面代码: public class MainActivity extends Activity { private ImageView imageView1; private Imag ...

  9. Word001

    C# Word 类库 2009-08-06 22:10 13470人阅读 评论(10) 收藏 举报 c#objectstring文档microsoftexcel using System;using ...

  10. web网站架构

    浅谈web网站架构演变过程   前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管 ...