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;
}

