22人参与 • 2025-05-22 • C/C++
运算符重载是 c++ 的一种特性,它允许程序员为自定义类型(如类和结构体)重新定义运算符的行为。通过运算符重载,我们可以使用熟悉的运算符语法来操作自定义类型的对象,从而使代码更加简洁、直观。
当运算符被⽤于类类型的对象时,c++语⾔允许我们通过运算符重载的形式指定新的含义。c++规定类类型对象使⽤运算符时,必须转换成调⽤对应运算符重载,若没有对应的运算符重载,则会编译报错。
例如,我们可以为自定义的复数类重载 +
运算符,使得两个复数对象可以直接使用 +
进行相加:
complex a(1, 2); complex b(3, 4); complex c = a + b; // 使用重载的 + 运算符
在 c++ 中,运算符重载通过定义特殊的成员函数或非成员函数来实现。
其基本语法如下:
返回类型 operator运算符(参数列表) { // 函数体 }
其中:
operator
是 c++ 的关键字,用于声明一个运算符重载函数。+
, -
, *
, /
等。注意:
重载<<和>>时,需要重载为全局函数,因为重载为成员函数,this指针默认抢占了第⼀个形参位置,第⼀个形参位置是左侧运算对象,调⽤时就变成了 对象<<cout,不符合使⽤习惯和可读性。
重载为全局函数把ostream/istream放到第⼀个形参位置就可以了,第⼆个形参位置当类类型对象。
运算符重载函数可以作为类的成员函数来定义。在这种情况下,函数的参数个数比运算符的操作数少一个,因为第一个操作数是通过 this
指针隐式传递的。
运算符重载函数也可以作为非成员函数(全局函数或友元函数)来定义。
在这种情况下,函数的参数个数与运算符的操作数相同。
赋值运算符重载是⼀个默认成员函数,⽤于完成两个已经存在的对象直接的拷⻉赋值,这⾥要注意跟拷⻉构造区分,拷⻉构造⽤于⼀个对象拷⻉初始化给另⼀个要创建的对象。
赋值运算符重载的特点:
拷贝构造:一个存在的对象去初始化另一个要实例化的对象; 赋值重载:已存在的两个对象之间的拷贝,注意返回值为类类型,处理连续赋值的情况
const成员函数
取地址运算符重载
c++ 中大部分运算符都可以被重载,包括:
+
, -
, *
, /
, %
, ++
, --
==
, !=
, <
, >
, <=
, >=
&&
, ||
, !
&
, |
, ^
, ~
, <<
, >>
=
, +=
, -=
, *=
, /=
, %=
, &=
, |=
, ^=
, <<=
, >>=
[]
, ()
, ->
, ,
, *
(解引用), &
(取地址)c++ 中少数运算符不能被重载,包括:
::
.
和 .*
?:
typeid
和 dynamic_cast
等sizeof
在使用运算符重载时,需要注意以下几点:
+
运算符应该实现加法的语义,而不是减法。const
成员函数。以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论