重载一元运算符

自增++运算符

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。
按任意键关闭此窗口. . .

这样功能就对上了;

相关推荐
代码游侠16 分钟前
学习笔记——数据结构学习
linux·开发语言·数据结构·笔记·学习
沐知全栈开发24 分钟前
XML 验证器
开发语言
xuanzdhc34 分钟前
Gitgit
java·linux·运维·服务器·c++·git
自学互联网1 小时前
使用Python构建钢铁行业生产监控系统:从理论到实践
开发语言·python
合作小小程序员小小店1 小时前
桌面开发,在线%医院管理%系统,基于vs2022,c#,winform,sql server数据
开发语言·数据库·sql·microsoft·c#
一点★1 小时前
“equals”与“==”、“hashCode”的区别和使用场景
java·开发语言
十一.3661 小时前
79-82 call和apply,arguments,Date对象,Math
开发语言·前端·javascript
q***51891 小时前
【语义分割】12个主流算法架构介绍、数据集推荐、总结、挑战和未来发展
算法·架构
程小k1 小时前
迷你编译器
c++·编辑器
合作小小程序员小小店1 小时前
桌面开发,下午茶甜品管理系统开发,基于C#,winform,sql server数据库
开发语言·数据库·sql·microsoft·c#