c++8.运算符重载
大约 3 分钟
运算符
算术运算符:
+
(加法)-
(减法)*
(乘法)/
(除法)%
(取模)
关系运算符:
==
(等于)!=
(不等于)<
(小于)>
(大于)<=
(小于等于)>=
(大于等于)
逻辑运算符:
&&
(逻辑与)||
(逻辑或)!
(逻辑非)
位运算符:
&
(按位与)|
(按位或)^
(按位异或)~
(按位取反)<<
(左移)>>
(右移)
赋值运算符:
=
(赋值)+=
(加法赋值)-=
(减法赋值)*=
(乘法赋值)/=
(除法赋值)%=
(取模赋值)&=
(按位与赋值)|=
(按位或赋值)^=
(按位异或赋值)<<=
(左移赋值)>>=
(右移赋值)
递增和递减运算符:
++
(递增)--
(递减)
成员访问运算符:
->
(成员访问)->*
(成员指针访问)
函数调用运算符:
()
(函数调用)
下标运算符:
[]
(下标访问)
其他运算符:
,
(逗号运算符)&
(取地址运算符)*
(指针解引用运算符)sizeof
(sizeof 运算符)typeid
(typeid 运算符)new
(动态内存分配运算符)delete
(动态内存释放运算符)
运算符重载
1. 成员函数的运算符重载:
二元算术运算符:
MyClass MyClass::operator+(const MyClass& other) const
{
// 实现加法运算
// 返回结果
}
关系运算符:
bool MyClass::operator==(const MyClass& other) const
{
// 实现相等性比较
// 返回比较结果
}
递增和递减运算符:
//前置
MyClass& MyClass::operator++()
{
++i;
return *this;
}
//后置
MyClass& MyClass::operator++(int) //占位运算
{
int i = *this ;
i++;
return *this;
}
赋值运算符:
MyClass& MyClass::operator=(const MyClass& other)
{
// 实现赋值操作
// 返回修改后的对象
}
函数调用运算符:
ReturnType MyClass::operator()(/* 参数列表 */)
{
// 实现函数调用
// 返回结果
}
下标运算符:
ElementType& MyClass::operator[](size_t index)
{
// 实现下标访问
// 返回对应元素的引用
}
2. 全局函数的运算符重载:
二元算术运算符:
MyClass operator+(const MyClass& a, const MyClass& b)
{
// 实现加法运算
// 返回结果
}
关系运算符:
bool operator==(const MyClass& a, const MyClass& b)
{
// 实现相等性比较
// 返回比较结果
}
递增和递减运算符:
MyClass& operator++(MyClass& obj)
{
// 实现前置递增
// 返回修改后的对象
}
赋值运算符:
MyClass& operator=(MyClass& a, const MyClass& b)
{
// 实现赋值操作
// 返回修改后的对象
}
函数调用运算符:
也称为仿函数
ReturnType operator()(MyClass& obj, /* 参数列表 */)
{
// 实现函数调用
// 返回结果
}
下标运算符:
ElementType& operator[](MyClass& obj, size_t index)
{
// 实现下标访问
// 返回对应元素的引用
}
左移|右移运算符
#include <iostream>
class MyClass {
private:
int value;
public:
MyClass() : value(0) {}
// 重载左移运算符,用于输出对象
friend std::ostream& operator<<(std::ostream& os, const MyClass& obj) {
os << "Value: " << obj.value;
return os;
}
// 重载右移运算符,用于输入对象
friend std::istream& operator>>(std::istream& is, MyClass& obj) {
is >> obj.value;
return is;
}
};
int main() {
MyClass obj;
// 从标准输入流输入对象的值
std::cout << "Enter a value: ";
std::cin >> obj;
// 将对象的值输出到标准输出流
std::cout << "Object details: " << obj << std::endl;
return 0;
}