c++ 重载运算

背景

在c语言的时候,我们的运算符号都是基于内置类型进行的。到了c++这里,新增了类类型,它不是内置类型,但是有时候因为项目需要或者简易步骤时,我们需要类类型对象像内置类型一样进行运算。在此种背景下产生了重载运算符。

重载对象

除了 ?: . :: .*不能重载外,其他的都可以重载,

重载运算作用于什么

重载运算符后就成了函数,既可以在类内部重载运算符从而成为成员函数,也可以在类外部重载。大多数时候都是作为成员函数而存在。

概念

类型 operator符号(参数){},重载格式形如这样。当我们重载这些= () [] ->符号时,意味着他们必须是成员函数。作为成员函数时,函数只有一个参数,这个参数对象对应的是被重载的符号运算时右边那个对象,因为类中有this指针,相当于被重载的符号运算时左边的对象。如果作为非成员函数时,函数的参数个数就是和该运算符计算时对应的参数个数一致。比如重载了一个+运算符,函数为非成员函数,那么这个函数就是两个参数。第一个参数就是+号前面的数,第二个参数就是+号后面那个数。

举例

xxx.h

#pragma once
#include <iostream>
#include "TestOperator_Global.h"
using namespace std;
class TEST_OPERATOR_API ClassOperator
{
	friend ClassOperator  operator-(const ClassOperator& r1, const ClassOperator& r2);
public:
	explicit ClassOperator(int a, int b, string name);
	virtual ~ClassOperator();
public:
	ClassOperator operator+(const ClassOperator& r1);
public:
	void printInfo();
	
private:
	int a;
	int b;
	string  name;;
};
ClassOperator  operator-(const ClassOperator& r1, const ClassOperator& r2);

xxx.cpp

#include "ClassOperator.h"

ClassOperator::ClassOperator(int a, int b, string name)
{
	this->a = a;
	this->b = b;
	this->name = name;
}

ClassOperator::~ClassOperator()
{
}

ClassOperator ClassOperator::operator+(const ClassOperator& r1)
{
	return ClassOperator(a+r1.a, b+r1.b, name+r1.name);
}

void ClassOperator::printInfo()
{
	cout <<endl<< "ClassOperator::printInfo a:" <<a << " b:" << b << " name:" <<name<<std::endl;
}


ClassOperator operator-(const ClassOperator& r1, const ClassOperator& r2)
{
	ClassOperator tmp(r1.a - r2.a, r1.b - r2.b, r1.name - r2.name);
	return tmp;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯鲁吉亚不信

你的鼓励将是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值