重载一元运算符

自增++运算符

cpp 复制代码
#include<iostream>
using namespace std;
class CGirl
{
public:
	string name;
	int ranking;
	CGirl() { name = "zhongge"; ranking = 5; }
	void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }

};
int main() {
	CGirl g1;
	g1.show();
	return 0;
}

现在我们重载一个++运算符

cpp 复制代码
#include<iostream>
using namespace std;
class CGirl
{
public:
	string name;
	int ranking;
	CGirl() { name = "zhongge"; ranking = 5; }
	void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }
	void operator++() {
		ranking++;
	}

};
int main() {
	CGirl g1;
	++g1;
	g1.show();
	return 0;
}

main函数里的g1++不行但是++g1就行了;

然而你++(++g)不行,你让你重载函数返回对象的引用就可以了;

cpp 复制代码
#include<iostream>
using namespace std;
class CGirl
{
public:
	string name;
	int ranking;
	CGirl() { name = "zhongge"; ranking = 5; }
	void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }
	 CGirl & operator++() {
		ranking++;
		return *this;
	}

};
int main() {
	CGirl g1;
	++(++g1);
	g1.show();
	return 0;
}

上面这是自增运算符的前置,我们再来个后置的;

c++规定重载自增&自减运算符,如果重载函数有一个int形参,编译器处理后置表达式时将调用这个重载函数。

cpp 复制代码
#include<iostream>
using namespace std;
class CGirl
{
public:
	string name;
	int ranking;
	CGirl() { name = "zhongge"; ranking = 5; }
	void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }
	 CGirl & operator++(int ) {
		ranking++;
		return *this;
	}

};
int main() {
	CGirl g1;
	g1++;
	g1.show();
	return 0;
}

这样就ok了;


整数的话不可以后自增嵌套,前自增嵌套可以;

cpp 复制代码
#include<iostream>
using namespace std;
class CGirl
{
public:
	string name;
	int ranking;
	CGirl() { name = "zhongge"; ranking = 5; }
	void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }
	CGirl& operator++(int ) {
		ranking++;
		return *this;
	}


};
int main() {
	CGirl g1,g2;
	g2=g1++;
	g2.show();
	g1.show();
	return 0;
}
cpp 复制代码
name : zhongge , ranking : 6name : zhongge , ranking : 6
C:\Users\33007\source\repos\ConsoleApplication8\x64\Debug\ConsoleApplication8.exe (进程 9820)已退出,代码为 0。
按任意键关闭此窗口. . .

显然你g1++是后来加,g2应该是g1之前的值而不是增后的值。

所以改一下后++的代码;

cpp 复制代码
CGirl operator++(int ) {
	CGirl tmp = *this;
	ranking++;
	return tmp;
}

函数的返回值不能是引用,成员函数的临时对象不能引用;

cpp 复制代码
name : zhongge , ranking : 5name : zhongge , ranking : 6
C:\Users\33007\source\repos\ConsoleApplication8\x64\Debug\ConsoleApplication8.exe (进程 15512)已退出,代码为 0。
按任意键关闭此窗口. . .

这样功能就对上了;

相关推荐
浪子明X3 小时前
十六位账本怎样发现传输差错:Internet Checksum 生活类比
开发语言
v_34836087623 小时前
Android native端 堆栈打印
android·算法
residual_fan3 小时前
【学术论文】航空发动机故障诊断智能体:基于持续对比强化学习的动态优化方法
人工智能·算法·数据挖掘·数据分析
GG-_-Bond4 小时前
9.1 kv存储resp协议模拟面试
c++
GreenTea4 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
米糕闯编程4 小时前
鱼香ros2(五)用C++编写节点
c++·ros2·cmakelists·鱼香
深圳满意度咨询5 小时前
医院满意度数字化测评系统:从数据采集到智能决策的技术实践
算法
xiangyun616 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun616 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
白远山7 小时前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析