1.31号c++

运算符重载

运算符重载就是对运算符进行重新定义,赋予另一种功能,以适应不同的数据类型。

每个运算符重载都有两种实现方式:

1> 成员函数实现

2> 全局函数实现

算术运算符重载

种类:+ 、 - 、 * 、 /、 %

表达式: L # R (L 左操作数 # 运算符 R右操作数)

左操作数:可以是左值,也可以是右值,运算过程中不能被改变。

右操作数:可以是左值,也可以是右值,运算过程中不能被改变。

结果:右值(不可以被改变)

1> 成员函数实现算术运算符重载:

const 类名 operator#(const 类名 &R) const

{}

//第一个const表示运算结果是个右值,不能被改变。

//第二个const表示右操作数在运算符过程中,不能被改变。

//第三个const表示左操作数在运算符过程中,不能被改变。

2> 全局函数实现算术运算符重载:

const 类名 operator#(const 类名 &L, const 类名 &R)

{}

关系运算符重载

种类: > 、 >= 、 < 、<=、== 、 !=

表达式:L # R (L 左操作数 # 运算符 R右操作数)

左操作数:可以是左值,也可以是右值,运算过程中不能被改变。

右操作数:可以是左值,也可以是右值,运算过程中不能被改变。

结果:bool

1> 成员函数实现关系运算符重载:

bool operator#(const 类名 &R)const

{}

2> 全局函数实现关系运算符重载:

bool operator#(const 类名 &L,const 类名 &L)

{}

赋值运算符重载

种类:= 、 += 、 -= 、*= 、/= 、%=

表达式: L # R (L左操作数 #运算符 R右操作数)

左操作数:只能是左值,运算过程中要发生变化。

右操作数:可以是左值,也可以是右值,运算过程中,不能发生变化。

结果:自身的引用

1> 成员函数实现赋值运算符重载:

类名 &operator#(const 类名 &R)

{}

2> 全局函数实现赋值运算符重载:

类名&operator&( 类名 &L,const 类名 &R)

{}

自增、自减运算符重载

种类:++ 、 --

以自增为例:

1)前置自增

表达式:++O (O操作数)

操作数:只能是左值,运算过程中需要被改变

结果:左值 (自身的引用)

1>成员函数实现前置自增运算符重载:

类名 &operator++()

{}

2>全局函数实现前置自增运算符重载:

类名 &operator++(类名 &O)

{}

2) 后置自增

表达式:O++

操作数:只能是左值,运算过程中需要被改变

结果:右值 (不能被改变)

1>成员函数实现后置自增运算符重载:

const 类名operator++(int)

{}

2>全局函数实现后置自增运算符重载:

const 类名operator++(类名 &O,int)

{}

插入提取运算符重载

插入符

提取符 >>

cout 是ostream类的类对象

cin 是istream类的类对象

//全局函数实现<<运算符重载
ostream &operator<<(ostream &cout, const Person &p)
{
    cout << p.a << endl;
    cout << p.b << endl;
    return cout;
}
//全局函数实现>>运算符重载
istream & operator>>(istream &cin, Person &p)
{
    cin >> p.a >> p.b ;
    return cin;
}

不能重载的运算符

对象访问成员 .

指针访问成员 ->

三目运算符 ? :

sizeof()

作用域限定符 ::

你可能感兴趣的:(笔记)