C++系列学习总结(三)

运算符及其重载.

算数运算符

运算符作用
+/-/*//操作数相加/相减/相乘/相除
%取模,整除后的余数
++/–自增/自减

关系运算符

运算符作用
==检查操作数是否相等,相等返回1
!=判断操作做是否不相等,不相等返回1
>/</>=/<=判断操作数是否大于,小于,大于等于 ,小于等于,如果为真返回1

逻辑运算符

运算符作用
&&两边都为真,返回1
II两边有一个为真,返回1
!逆转操作数的逻辑状态,如果为真,则使其为假

位运算符

运算符作用
&按位相与,相同为1,不同为0
I按位相或,有1为1,没1为0
^异或,不同为1,相同为0
~按位取反
<<左移位置
>>右移位置

赋值运算符

运算符作用
=右边操作数赋值给左边操作数
+=/-=//=/*=/%=把左操作数加/减/乘/除/取模右操作数后赋值给左操作数

运算符优先级

运算符描述例子优先级结合性
()
[]
->
.
::
++

调节优先级的括号操作符
数组下标访问操作符
通过指向对象的指针访问成员的操作符
通过对象本身访问成员的操作符
作用域操作符
后置自增操作符
后置自减操作符
(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–){}
1从左到右
!
~
++

-
+
*
&
(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);
2从右到左
*
/
%
乘法操作符
除法操作符
取余数操作符
int i=2*4;
float f=10/3;
int rem=4%3;
3从左到右
+
-
加法
减法
int i=2+3;
int i=5-1;
4从左到右
<<
>>
按位左移
按位右移
int flags=33<<1;
int flags=33>>1;
5从左到右
<
<=
>
>=
小于比较操作符
小于或等于比较操作符
大于比较操作符
大于或等于比较操作符
if(i<42)…
if(i<=42)…
if(i>42)…
if(i>=42)…
6从左到右
==
!=
等于比较操作符
不等于比较操作符
if(i==42)…
if(i!=42)…
7从左到右
&按位与操作符flags=flags&42;8从左到右
^按位异或操作符flags=flags^42;9从左到右
I按位或操作符按位或操作符10从左到右
&&逻辑与操作符逻辑与操作符11从左到右
II逻辑或操作符if(conditionAconditionB)…
? :三元条件操作符int i=(a>b)?a:b;13从右到左
=
+=
-=
*=
/=
%=
&=
^=
I=
<<=
>>=
赋值操作符
复合赋值操作符(加法)
复合赋值操作符(减法)
复合赋值操作符(乘法)
复合赋值操作符(除法)
复合赋值操作符(取余)
复合赋值操作符(按位与)
复合赋值操作符(按位异或)
复合赋值操作符(按位或)
复合赋值操作符(按位左移)
复合赋值操作符(按位右移)
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;
14
逗号操作符for(i=0,j=0;i<10;i++,j++)…15从左到右

以上摘自:http://www.jsons.cn/levelcadd/

运算符重载

运算符重载就是运算符与类结合,给予运算符新的方法,实现了类的多态性。

#include<iostream>
using namespace std;
class Entity
{
public:
	int x;
	int y;
	Entity(int X,int Y):x(X),y(Y) {};
	Entity operator+(const Entity& A)const {
		return Add(A);
	}
	Entity Add(const Entity& B) const {
		return Entity(x + B.x, y + B.y);
	}
};
ostream& operator<<(ostream& stream, Entity& A){
	stream << A.x << "," << A.y << endl;
	return stream;
}
int main() {
	Entity A(1, 2);
	Entity B(3, 4);
	Entity C = A + B;
	cout << C << endl;
	cin.get();
}

这里对加法以及按位左移运算符进行重载,使其能够对类中的成员变量进行操作。

ostream& operator<<(ostream& stream, Entity& A){
	stream << A.x << "," << A.y << endl;
	return stream;
}

这一段的意思是为’ostream’(输出流)类型和’Entity’类型定义了一个重载的插入运算符’<<‘。这个函数的具体作用是,当你在输出流中使用’<<'运算符插入一个’Entity’类型的对象时,会先将’Entity’对象的’x’和’y’属性值以逗号分隔的形式输出,然后在末尾添加一个换行符。函数最后返回了输出流,这样可以链式地调用其他的输出操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值