【运算符】



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

优先级 操作符 描写叙述 样例 结合性
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. Unity3D之挥动武器产生的剑痕特效

    网维教程网 观看很多其它教程 眼下已知3种方法能够做这样的剑痕特效 1.尾随特效 2.程序实现动态面来处理剑痕动画. 3.美术实现剑痕动画,直接坐在模型动画里面 (由于我不会美术所以这个忽略 嘿嘿) ...

  2. 上传App时遇IDFA错误问题

    今天上传App时遇到下图1的情况,很纳闷,又是苹果新规. 通常是第三方的库引起啦,马上想到百度统计了,打开SDK下载页面看看简单介绍,里面有讲到这个问题了. 图2就是这次改动的原因. 更新SDK,之前 ...

  3. 三星Samsung 4.4.2该负责人制度,简化名单

    installed uninstalled AccessControl.apk AllshareControlShare.apk AirMotionTryActually.apk AllshareFi ...

  4. Class Diagram

  5. 从零開始学android&lt;数据存储(1)SharedPreferences属性文件.三十五.&gt;

    在android中有五种保存数据的方法.各自是: Shared Preferences Store private primitive data in key-value pairs. 相应属性的键值 ...

  6. Android使用百度定位SDK方法及错误处理

    下面事例是使用Android平台的部分代码.对于这个平台百度的开放人员已经写了完整的demo,把工程导入到eclipse中之后一般没有错误,如果报错的话,eclipse也会给出提示.一般可以通过将pr ...

  7. RedGate 工具SQLMultiScript1.1

    原文:RedGate 工具SQLMultiScript1.1 RedGate 工具SQLMultiScript1.1 SQLMultiScript是一个脚本分发工具,当你写好了一个SQL脚本之后,你需 ...

  8. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(三)

    全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...

  9. Codeforces Round #264 (Div. 2) C Gargari and Bishops 【暴力】

    称号: 意甲冠军:给定一个矩阵,每格我们有一个数,然后把两个大象,我希望能够吃的对角线上的所有数字.我问两个最大的大象可以吃值. 分析:这种想法是暴力的主题,计算出每一格放象的话能得到多少钱,然后求出 ...

  10. 使用CMakeLists.txt 判断编译器是否支持C++11

    #将下面的内容添加到CMakeLists.txt当中include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11&quo ...