C++操作符重载入门


operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator和后面的操作符整体上视为一个函数名。

一、为什么使用操作符重载?

对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,等等,则需要用户自己来定义关于这个操作符的具体实现。比如,判断两个人是否一样大,我们默认的规则是按照其年龄来比较,所以,在设计person 这个class的时候,我们需要考虑操作符==,而且,根据刚才的分析,比较的依据应该是age。那么为什么叫重载呢?这是因为,在编译器实现的时候,已经为我们提供了这个操作符的基本数据类型实现版本,但是现在他的操作数变成了用户定义的数据类型class,所以,需要用户自己来提供该参数版本的实现。

二、如何声明一个重载的操作符?

A: 操作符重载实现为类成员函数

重载的操作符在类体中被声明,声明方式如同普通成员函数一样,只不过他的名字包含关键字operator,以及紧跟其后的一个c++预定义的操作符。

#include <iostream>

using namespace std;
//可以用如下的方式来声明一个预定义的==操作符
class Person {
public:
	Person(int a) { this->age = a; }
	~Person();
	inline bool operator==(const Person &ps) const;
private:
	int age;
};

Person::~Person() {};
//实现方式
inline bool Person::operator==(const Person &ps) const {
	if (this->age == ps.age)
		return true;
	return false;
}


//调用方式
int main(int argc, char* argv[]) {
	Person p1(10);
	Person p2(20);
	if (p1 == p2) {
		cout << "the age is equal!" << endl;
	}
	else {
		cout << "the age is not equal!" << endl;
	}
	return 0;
}

代码输出:the age is not equal!

这里,因为operator 是class person的一个成员函数,所以对象p1,p2都可以调用该函数,上面的if语句中,相当于p1调用函数,把p2作为该函数的一个参数传递给该函数,从而实现了两个对象的比较。

B:操作符重载实现为非类成员函数(全局函数)

对于全局重载操作符,代表左操作数的参数必须被显式指定。例如:

#include <iostream>
using namespace std;

class person {
public:
	int age;
private:
};

//满足要求,做操作数的类型被显示指定
bool operator==(person const &p1, person const &p2) {
	if (p1.age == p2.age)return true;
	return false;
}

int main() {
	person rose;
	person jack;

	rose.age = 18;
	jack.age = 23;
	if (rose==jack) {
		cout << "ok" << endl;
	}
	else {
		cout << "no" << endl;
	}
	return 0;
}

代码输出:no

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页
实付 39.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值