c++学习笔记之运算符重载

简介: 1、重载运算符void operator+(....)        //重载"+"运算符(1)如果是成员函数形式,那么必须是非static(2)使用运算符必须重载,除了“=”、“&”、“,”这三个可直接使用,也可以重载。(3)不能重载的运算符“.”、“.*”、“::”、“?:”(4)重载不能改变运算符的优先级,不能改变结合律,不能改变运算符“元数”(操作数)(5)不能创建新运算符(6)不能改变运算符对基本类型对象操作的含义。重载只能对用户自定义类型对象或基本类型和用户自定义类型混合使用

1、重载运算符


void operator+(....)        //重载"+"运算符


(1)如果是成员函数形式,那么必须是非static


(2)使用运算符必须重载,除了“=”、“&”、“,”这三个可直接使用,也可以重载。


(3)不能重载的运算符“.”、“.*”、“::”、“?:”


(4)重载不能改变运算符的优先级,不能改变结合律,不能改变运算符“元数”(操作数)


(5)不能创建新运算符


(6)不能改变运算符对基本类型对象操作的含义。重载只能对用户自定义类型对象或基本类型和用户自定义类型混合使用


2、相关运算符


如重载加法运算符 obj2 = obj2 + obj1

但是obj2 += obj1不成立,必须重载“+=”运算符才行。


3、成员函数和全局函数



(1)“()”、“[]”、“->”或任何赋值运算符重载,必须声明为类成员函数。其他运算符则都可以


(2)如果是成员函数,那么左边操作数(或唯一操作数)必须是该类的对象。否则用全局函数重载,如重载流操作“<<”。


(3)使用全局函数可以使重载的运算符有可交换性,即左右操作数可以交换。


(4)一元运算符可以重载为一个不带参数的非static成员函数或带一个参数的全局函数(全局函数的参数必须是该类的对象或引用)


(5)二元运算符可以重载为带一个参数的非static成员函数或带两个参数的全局函数(其中一个参数必须是该类的对象或引用)


4、自我赋值


如果出现自我赋值,而operator=未检测,那么函数会在赋值操作前删除动态内存,使指针指向已释放的内存卡,导致运行错误。


5、类型转换


c++基本类型可以互相转换,用户自定义类和基本类型或用户自定义类之间则不能。

转换运算符又称强制类型转换运算符:


classA::operator classB() const;

当编译器遇到static_cast(a)时(a是classA一个对象),会调用上面函数进行转换。


(1)转换构造函数:任何单一参数的构造函数都可以看成是转换构造函数


(2)转换运算符和转换构造函数有点事编译器可以隐式调用。


(3)在重载运算符函数中,这种自定义的类型转换只能隐式调用一级。


6、重载自增自减(++、--)


前置 class &operator++();

后置 class operator++(int);

后置函数中int参数为0,是一个哑值,仅为了区分前置和后置。

后置自增自减会产生临时对象,所以尽量使用前置自增自减。


7、禁止隐式转换


左右单参数构造函数都可以用做隐式类型转换。

但是如果有些这类构造函数不像被当成隐式转换构造函数,需要声明成explicit即可。

explicit只能用于声明单参数构造函数,声明其他构造函数或成员函数会编译错误。


目录
相关文章
|
3月前
|
C++
c++学习笔记07 结构体
C++结构体的详细学习笔记07,涵盖了结构体的定义、使用、数组、指针、嵌套、与函数的交互以及在结构体中使用const的示例和解释。
39 0
|
2月前
|
C++
C++(十五) 运算符重载
C++中的运算符重载允许对已有运算符的功能进行重新定义,从而扩展语言功能、简化代码并提升效率。重载遵循特定语法,如 `friend 类名 operator 运算符(参数)`。重载时需注意不可新增或改变运算符数量、语义、优先级、结合性和返回类型。常见示例包括双目运算符 `+=` 和单目运算符 `-` 及 `++`。输入输出流运算符 `&lt;&lt;` 和 `&gt;&gt;` 也可重载。部分运算符只能作为成员函数重载。
|
2月前
|
安全 C语言 C++
C++学习笔记
C++学习笔记
|
3月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
42 4
|
3月前
|
C++
【学习笔记】【C/C++】 c++字面值常量
【学习笔记】【C/C++】 c++字面值常量
35 1
|
3月前
|
存储 C++
c++学习笔记05 函数
C++函数使用的详细学习笔记05,包括函数的基本格式、值传递、函数声明、以及如何在不同文件中组织函数代码的示例和技巧。
34 0
c++学习笔记05 函数
|
3月前
|
编译器 C++
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
44 0
|
3月前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
40 0
|
3月前
|
C++
c++学习笔记09 引用
C++引用的详细学习笔记,解释了引用的概念、语法、使用注意事项以及引用与变量的关系。
43 0
|
3月前
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
47 0