C++类与对象笔记十二:运算符重载三:递增运算符重载

先看看系统自带的递增运算符++

 // 递增运算符重载 ++; a++; ++a
 int a = 10;
 cout << ++a << endl;  // 11  先加,后输出。
 cout << a << endl;    // 11  已加。

 int b = 10;
 cout << b++ << endl;  // 10  先输出,然后再加。
 cout << b << endl;    // 11  已加。

我们定义我们自己的整型。满足前置递增,后置递增。

class MyInt
{
public:
	MyInt()
	{
		m_Num = 0;
	}
private:
	int m_Num;
};

调用一下试试:

 左移运算符报错,说没有匹配的类型。所以我们需要重载,包括使用++也会报错。

 所以自己的类型,必须重新定义个运算符重载。

为了使得我们的cout在左侧,所以只能定义一个全局的重载运算符函数。

ostream& operator<<(ostream& cout, MyInt myint)
{
	cout << myint.m_Num;
    return cout;
}

同时在类内将全局函数声明为友元

### C++ 运算符重载知识点总结 #### 一、基本概念 - **运算符重载**是指通过改变现有运算符的功能,使其可以用于用户自定义型的对象操作。C++允许对大多数内置运算符进行重载,使得对象能够像原始数据型一样参表达式计算。 #### 二、常见可重载运算符 1. **单目运算符** - 包含前置递增(`++`)、后置递增、取反(!)等。 2. **双目运算符** - 加法(+), 减(-),乘(*),除(/),模(%),比较(< > <= >= == != ) 等常用数学及逻辑运算符均支持重载。 3. **复合赋值运算符** - += -= *= /= %= >>= <<= &= ^= |= 可简化连续同种运算后的赋值过程。 4. **下标[] 和->箭头指针访问成员符号** 5. **函数调用()** #### 、不可重载运算符 包括`.*`, `::`, `.`, `?:`(条件运算符) #### 四、语法形式 有两种主要方式来实现运算符重载: - 成员函数的形式,在内部声明并定义; ```cpp class MyClass { public: // 示例:+ 运算符作为成员函数 MyClass operator+(const MyClass& other); }; ``` - 非成员函数即全局作用域下的友元函数的方式,通常用于处理两个不同型的操作数情况。 ```cpp // 假设需要让int + MyClass成为可能,则需在外定义 friend MyClass operator+(int num, const MyClass& obj); ``` #### 五、注意事项 - 构造合理的返回型:对于+=这样的复合赋值运算符来说应该返回引用(*this) - 后置增量/减量特殊规则:为了区分前置后置版本,后置版本接收一个无用整型参数(int). 示例如下: ```cpp MyClass& operator++(); // ++i; 前置++ MyClass operator++(int); // i++; 后置++ ``` - 尽量保持原有含义一致原则;避免混淆使用者理解。 - 考虑是否真的有必要去重载某些不太适合改写的运算符。 --- 希望上述内容能帮助您更好地理解和掌握C++中的运算符重载特性!
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值