重载

article/2025/9/21 8:46:31
  • 实质:重载的实质就是写一个重载函数
  • 语法:函数类型 operator 运算符名称 {对运算符的重载处理}
  • 说明:如果要对加号进行重载,则 “operator +” 就是函数名。
  • 方法
    (1)成员函数法
    定义:把运算符重载的函数作为类的成员函数
    说明:在该方法中,重载函数只有一个参数,因为由于重载函数是Complex类中的成员函数,因此有一个参数是隐含的,运算符函数是用this指针隐式访问类对象的成员。如:this –> real + c2.real。this –> real就是 c1.real。

    (2)非成员函数法
    定义:运算符重载的函数不是类的成员函数(可以是一个普通函数),放在类外,在类中把它声明为友元函数。
    优点:代码看起来更加清晰。

例1: 通过重载实现复数相加(i.e. 对运算符 “+” 的重载)

法一:成员函数法

#include <iostream>
using namespace std;//Step 1: 定义Complex类,及声明有关函数:复数相加函数
class Complex 
{private:double real;double imag;public:Complex(){real=0;imag=0;} //定义构造函数Complex(double r,double i){real=r;imag=i;} //构造函数重载Complex operator + (Complex &c2);  //声明重载运算符+的函数void display();//声明输出函数
};//Step 2: 定义重载运算符+的函数: operator +()
Complex Complex::operator +(Complex &c2)
{Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;
}//Step 3: 定义输出函数display()
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}//Step 4: 在主函数内调用其他函数
int main()
{Complex c1(3,4),c2(5,-10),c3;c3=c1+c2;cout<<"c1="; c1.display();cout<<"c2="; c2.display();cout<<"c1+c2="; c3.display();return 0;
}

输出:
这里写图片描述

法二:非成员函数法——友元函数法


#include <iostream>
using namespace std;//Step 1: 定义Complex类,及声明有关函数:复数相加函数
class Complex 
{private:double real;double imag;public:Complex(double r=0,double i=0); //声明构造函数的同时初始化(即:赋初值)friend Complex operator + (Complex c1,Complex c2);  //声明重载函数作为友元函数void display();//声明输出函数
};//Step 2: 定义构造函数
Complex::Complex(double r,double i)
{  real=r;imag=i;
} //Step 3: 定义重载运算符+的函数: operator +()
Complex operator +(Complex c1,Complex c2){return Complex(c1.real+c2.real,c1.imag+c2.imag);}//Step 4: 定义输出函数display()
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}//Step 5: 在主函数内调用其他函数
int main()
{Complex c1(3,4),c2(5,-10),c3;c3=c1+c2;cout<<"c1="; c1.display();cout<<"c2="; c2.display();cout<<"c1+c2="; c3.display();return 0;
}
//ps:这里之所以要初始化对象数据成员,是因为最后建立对象c3时,没有传递实参,因此必须要有初始化的值才行

例2: 通过重载实现复数相乘(i.e. 对运算符 “*” 的重载)

这里用友元函数法来实现

#include <iostream>
using namespace std;//Step 1: 定义Complex类,及声明有关函数:复数相加函数
class Complex 
{private:double real;double imag;public:Complex(double r=0,double i=0); //声明构造函数friend Complex operator * (Complex c1,Complex c2);  //声明重载函数作为友元函数void display();//声明输出函数
};//Step 2: 定义构造函数
Complex::Complex(double r,double i)
{  real=r;imag=i;
} //Step 3: 定义重载运算符*的函数: operator *()
Complex operator *(Complex c1,Complex c2)
{Complex c;c.real=c1.real*c2.real-c1.imag*c2.imag;c.imag=c1.real*c2.imag+c1.imag*c2.real;return c;    
}//Step 4: 定义输出函数display()
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}//Step 5: 在主函数内调用其他函数
int main()
{Complex c1(3,4),c2(5,-10),c3;c3=c1*c2;cout<<"c1="; c1.display();cout<<"c2="; c2.display();cout<<"c1*c2="; c3.display();return 0;
}

这里写图片描述

例3: 有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加(如c=a+b)

#include <iostream>
using namespace std;//Step 1: 定义Matrix类,及声明有关函数:矩阵相加函数
class Matrix            //定义Matrix类{public:Matrix();                                          //声明构造函数friend Matrix operator+(Matrix ,Matrix );        //重载运算符“+”void input();                                      //输入数据函数void display();                                    //输出数据函数private:int mat[2][3];};//Step 2: 定义构造函数
Matrix::Matrix()          
{for(int i=0;i<2;i++)for(int j=0;j<3;j++)mat[i][j]=0; //初始化对象们的公有成员mat[i][j]
}//Step 3: 定义重载运算符+的函数: operator +()
Matrix operator+(Matrix a,Matrix b)      //定义重载运算符“+”函数
{Matrix c;for(int i=0;i<2;i++)for(int j=0;j<3;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}return c;
}//Step 4: 定义输入函数input()和输出函数display()
void Matrix::input()           //定义输入数据函数
{cout<<"input value of matrix:"<<endl;for(int i=0;i<2;i++)for(int j=0;j<3;j++)cin>>mat[i][j];
}void Matrix::display()           //定义输出数据函数
{for (int i=0;i<2;i++){for(int j=0;j<3;j++){cout<<mat[i][j]<<" ";}cout<<endl;}
}//Step 5: 在主函数内调用其他函数
int main()
{Matrix a,b,c;a.input();b.input();cout<<endl<<"Matrix a:"<<endl;a.display();cout<<endl<<"Matrix b:"<<endl;b.display();c=a+b;           //用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl;c.display();return 0;
}

http://chatgpt.dhexx.cn/article/aaeCdL7A.shtml

相关文章

重载运算符

输入带有空格的字符串 cin.getline(a[i]) 运算符重载的语法 定义一个重载的运算符与定义一个函数类似&#xff0c;只是这个函数的名称必须以operator开头。 运算符重载函数的一般形式为&#xff1a;类型 类名::operator 重载的运算符(参数表) {函数体 }参数的个数由以下两个…

Python——运算符重载

Python——运算符重载 1.加法运算符重载和减法运算符重载2.__str__()方法重载和__ge__()方法重载3.索引的切片重载 运算符重载指的是将运算符与类方法关联起来&#xff0c;每个运算符对应一个指定的内置方法。 Python通过重写一些内置方法&#xff0c;实现了运算符的重载功能。…

C++ 运算符重载

前言 本文引用于“C语言中文网”&#xff0c;我整理出来放在博客&#xff0c;方便大家共同学习。所有知识点和代码均已亲测可用&#xff0c;如有疑问&#xff0c;可提出&#xff0c;一起讨论学习。 本章内容&#xff1a; 1. C运算符重载的概念和原理 2. C重载&#xff08;C重…

配置使用Navicat或PLSQL可视化工具远程连接Oracle

写在前面 本文讲解的是在没有 Oracle 环境&#xff0c;如何使用可视化工具配置远程连接服务器 Oracle 数据库。 目录 写在前面一、概述二、下载 Oracle Instant Client三、配置环境变量四、配置监听五、可视化工具环境配置5.1、Navicat5.2、PLSQL 一、概述 很多时候&#xff0c…

Windows系统远程连接Linux系统操作

远程连接服务器管理时&#xff0c;系统不同可分为两种&#xff1a;一是Linux系统和Mac系统或者Linux系统之间连接&#xff1b;二是Windows系统连接到Linux系统 第一种情况下&#xff1a;在Linux系统和Mac系统下可以相互用命令"ssh [-p] 22 连接主机名主机IP地址"连…

怎么删除远程桌面连接计算机,win10系统强制删除远程桌面连接软件的方法

大家都知道win10系统中&#xff0c;自带有远程桌面连接软件&#xff0c;能够帮助我们实现远程控制其他计算机进行一系列操作&#xff0c;但是有些用户可能用不到这个软件&#xff0c;就想要强制删除远程桌面连接软件&#xff0c;那该怎么操作呢&#xff0c;小编这就给大家带来w…

被远程连接的windows一定要设置账号的密码吗

背景 我们有个windows系统&#xff08;方便表述叫P)&#xff0c;比如win10的&#xff0c;平时使用的用户名是a&#xff0c;没有登录密码&#xff0c;平时使用P的过程是允许没有密码登录操作系统的。 但是&#xff0c;如果使用另外一台windows远程连接它&#xff0c;就得为a设…

SecureCRT--远程连接工具

SecureCRT简介 Linux一般作为服务器使用&#xff0c;而服务器一般放在机房&#xff0c;你不可能在机房操作你的Linux服务器。这时我们就需要远程登录到Linux服务器来管理维护系统。 Linux系统中是通过SSH服务实现的远程登录功能&#xff0c;默认ssh服务端口号为 22。Window系…

【rdesktop】超实用的ubuntu远程连接windows软件

个人定制命令行 rdesktop 192.168.50.118 -u zhankun -p LPjj1234 -z -a 16 -x lan -r clipboard -g 1920x105000 -r sound:local -r disk:share/home/lyp/zk_share1、ubuntu端 sudo apt install rdesktop2、Windows端 1.计算机—属性—远程设置—远程&#xff0c;勾选&…

Mac远程控制软件有哪些?Macos好用的远程桌面连接软件推荐

Mac功能强大&#xff0c;但是远程协助有点麻烦&#xff0c;此时需要专业的 Mac远程控制软件。远程桌面自带系统连接不太好用&#xff0c;一般不懂计算机的人很难成功。还推荐使用专用的远程控制软件实现&#xff0c;操作简单&#xff0c;不需要很多计算机知识。就下载量和好评率…

远程连接——Win连接远程Linux的软件

SSH客户端主要用来远程访问服务器。 因为像Linux之类的系统要想在Windows上面存在&#xff0c;基本都是通过虚拟机&#xff0c;就好比搭建了一个服务器&#xff0c;你要连接这个系统&#xff0c;自然需要用到一些工具&#xff0c;而SSH客户端就属于这样的工具&#xff0c;或者…

有服务器可以远程连接电脑软件,支持远程控制电脑的工具有哪些?这几款软件值得一试!...

对于普通人来说,如果自己身处于一线工作城市,与异地的家人进行聊天时,他们遇到了电脑上的某种问题时,而我们直接靠说话或文字,并不能直接来解决他们所遇到的问题,他们自己又根本不会操作,此时直接控制他们的电脑就是一个非常棒的方法,既可以解决了问题,不需要多费口舌…

centos 7.6上面安装向日葵远程连接软件

原文&#xff1a;https://www.cnblogs.com/yunjisuan1024/p/11731369.html 下载&#xff1a;https://sunlogin.oray.com/download/ 安装教程&#xff1a;https://service.oray.com/question/11017.html 依赖问题&#xff1a;https://service.oray.com/question/8286.html Cen…

Navicat远程连接MySQL服务器

文章目录 一、准备二、配置Navicat允许远程连接MySQL数据库1、使用Navicat直接连接MySQL2、使用 Navicat 通过 SSH 远程登录后再本地方式连接 MySQL3、查看连接 为什么使用ssh登录1.便捷性 Navicat:数据库可视化工具 一、准备 一台开启 SSH 登录的 Linux 服务器 或 已开启远程…

Linux远程连接和软件安装

Linux远程连接和软件安装 文章目录 Linux远程连接和软件安装1.Linux远程连接简介2.远程连接准备3.Linux进程和程序4.moba实现远程连接步骤:5.软件安装1)yum命令:在线安装2)rpm命令:直接安装3)tar:解压安装4)unzip:解压安装 1.Linux远程连接简介 SSH协议(Secure Shell):专为远程…

推荐|6 款免费又好用的远程管理工具

「 读者福利&#xff01;2 TB 各类技术资源免费赠送 」 大家好&#xff0c;我是你们的民哥。 2020年开年&#xff0c;让大家意想不到的是&#xff0c;本以为很短暂的假期&#xff0c;却因为这个疫情一推再推&#xff0c;很多人做梦也没有想到&#xff1a;能在家呆这么长时间&am…

推荐几款主流好用的远程终端连接管理软件

一、介绍 远程终端连接管理软件是管理服务器、虚拟机等远程计算机系统不可或缺的工具之一&#xff0c;它可以通过网络连接到另一台计算机&#xff0c;以执行命令、编辑文件或进行其他管理任务&#xff0c;下面我将为大家介绍几款主流好用的远程终端连接管理软件&#xff0c;并…

SSO单点登录原理及实现

一、SSO简介 单点登录&#xff08; Single Sign-On , 简称 SSO &#xff09;是多个相关但独立的软件系统访问控制的一个属性。通过使用该属性&#xff0c;用户登录与单个ID和密码来访问所连接的一个或多个系统&#xff0c;而不使用不同的用户名或密码&#xff0c;或在某些配置…

单点登录三个方法及原理:共享Session、基于OpenId的单点登录、基于Cookie的OpenId存储方案

单点登录三个方法及原理&#xff1a;共享Session、基于OpenId的单点登录、基于Cookie的OpenId存储方案 单点登录在现在的系统架构中广泛存在&#xff0c;他将多个子系统的认证体系打通&#xff0c;实现了一个入口多处使用&#xff0c;而在架构单点登录时&#xff0c;也会遇到一…

单点登录原理与实现方式

一、单系统登录机制 1、http无状态协议 web应用采用browser/server架构&#xff0c;http作为通信协议。http是无状态协议&#xff0c;浏览器的每一次请求&#xff0c;服务器会独立处理&#xff0c;不与之前或之后的请求产生关联&#xff0c;这个过程用下图说明&#xff0c;三次…