运算符重载的三种实现方法

一、重载为一般函数

格式:返回类型 operator 运算符(参数列表)

cpp 复制代码
struct Complex{//定义一个复数结构:包括实部与虚部两部分 
	double real;//实部 
	double imag;//虚部 
};
Complex operator+(Complex c1,Complex c2){//对加法运算的重载:将运算符'+' 定义为两复数相加 
	Complex c;
	c.real=c1.real+c2.real;
	c.imag=c1.imag+c2.imag;
	return c;
}
ostream&operator<<(ostream&out,Complex c){
	out<<"("<<c.real<<"+"<<c.imag<<"i)";
	return out;
}
int main()
{
	Complex c1={1,2},c2={3,4},c3;//结构体变量的声明
	c3=c1+c2; 
	cout<<c1<<"+"<<c2<<"="<<c3<<endl;
}

运行结果

二、重载为友元函数

需要访问类中的私有成员,则要将该重载函数在类中声明为友元类。

格式:friend 类型 重载函数名(参数);

cpp 复制代码
#include<iostream>
using namespace std;
class Complex{//定义一个复数类包括实部与虚部两部分 
    private:
	   double real,imag;
	public:
		Complex(double r=0,double i=0):real(r),imag(i){
		}
		friend Complex operator+(Complex c1,Complex c2);
		friend ostream&operator<<(ostream&out,Complex c);
};
Complex operator+(Complex c1,Complex c2){//对加法运算的重载:将运算符'+' 定义为两复数相加,需要对复数类的私有属性进行访问 
	Complex c;
	c.real=c1.real+c2.real;
	c.imag=c1.imag+c2.imag;
	return c;
}
ostream&operator<<(ostream&out,Complex c){//需要对复数类的私有属性进行访问,声明成友元类 
	out<<"("<<c.real<<"+"<<c.imag<<"i)";
	return out;
}
int main()
{
	Complex c1(1,2),c2(3,4),c3;
	c3=c1+c2; 
	cout<<c1<<"+"<<c2<<"="<<c3<<endl;
}

三、重载为成员函数

直接声明为成员函数

cpp 复制代码
#include<iostream>
using namespace std;
class Complex{//定义一个复数类包括实部与虚部两部分 
    private:
	   double real,imag;
	public:
		Complex(double r=0,double i=0):real(r),imag(i){
		}
		Complex operator+(Complex c);//直接在类中声明重载运算符 
		friend ostream&operator<<(ostream&out,Complex c);
};
Complex Complex::operator+(Complex c){//定义重载运算符 
	return Complex (real+c.real,imag+c.imag);
}
ostream&operator<<(ostream&out,Complex c){//需要对复数类的私有属性进行访问,声明成友元类 
	out<<"("<<c.real<<"+"<<c.imag<<"i)";
	return out;
}
int main()
{
	Complex c1(1,2),c2(3,4),c3;
	c3=c1+c2; 
	cout<<c1<<"+"<<c2<<"="<<c3<<endl;
}
相关推荐
峥无4 小时前
C++11 深度详解:现代 C++ 基石全梳理
开发语言·c++·笔记
阿米亚波4 小时前
【C++ STL】std::unordered_multimap
开发语言·数据结构·c++·笔记·stl
小王C语言5 小时前
【3. 基于 Vibe Coding 的 OJ 平台】. 构建仓库、环境准备、需求梳理、安装依赖
网络·c++
小王C语言6 小时前
【8.进行接口测试】:通过 curl 进行接口自动化测试 / 通过 python 程序进行接口自动化测试
网络·c++
888CC++6 小时前
C++ 快速学习指南:从入门到进阶的实战路线
开发语言·c++
小小晓.7 小时前
C++记:函数
开发语言·c++·算法
驱动小百科8 小时前
Windows运行库合集下载 VC++、DirectX、.NET运行库安装教程
c++·windows·.net·windows运行库合集下载·windows运行库安装
charlie1145141918 小时前
Cinux —— 给物理内存建账本:bitmap 物理内存管理器
开发语言·c++·操作系统·开源项目
2301_7779983411 小时前
Linux线程同步与互斥(三):信号量与环形队列实现生产者消费者模型
linux·c语言·c++
啦啦啦啦啦zzzz11 小时前
设计模式:单例模式和工厂模式
c++·单例模式·设计模式·工厂模式