双目运算符和单目运算符的重载

目录

题目

源码

结果示例


题目

建立一个矩阵类,可以完成指定的操作或运算。

说明:

  1. 矩阵为2行3列,基类型为整型;
  2. 操作或运算:初始化(>>)、输出(<<)、赋值(=)、两个同类型矩阵的相加(+)、矩阵前置自增(++,即所有元素都加1)、矩阵后置自增(++,即所有元素都加1)、一个整数乘矩阵(*,即该整数乘以每个元素)、矩阵乘一个整数(*,即每个元素乘以该整数)。

要求:针对矩阵的各种操作,请先确认使用何种类型函数实现(仅限于成员函数、友元函数,暂不使用转换构造函数和类型转换函数)。

提示:运算符重载一般遵循如下原则:(1)=、[]、()、->必须作为成员函数;(2)<<、>>、类型转换运算符必须作为友元函数;(3)一般将单目运算符和复合运算符重载为成员函数;(4)一般将双目运算符重载为友元函数。

可以利用如下测试函数进行验证:

int main()
{Matrix a(1,2,3,4,5,6),b(6,5,4,3,2,1),c,d,e;int a1=2,a2=3;//用于测试数乘运算时用到的整数//(1)测试:>>,输入a和b//a的值如下://	1	1	1//	2	2	2//b的值如下://	3	2	1//	6	5	4cout<<"请输入a和b"<<endl;cin>>a>>b;cout<<"--------------------------"<<endl;//(2)测试:<<,输出a和b//输出结果格式://a的值如下:(b与a类似)//	1 1 1//	2 2 2cout<<"a的值如下:"<<endl;cout<<a<<endl;cout<<"b的值如下:"<<endl;cout<<b<<endl;cout<<"--------------------------"<<endl;//(3)测试:+,并输出a+b的结果cout<<"a+b的结果如下:"<<endl;cout<<a+b<<endl;cout<<"--------------------------"<<endl;//(4)测试:=,将a赋给c,并输出ccout<<"执行c=a之后,c的值如下:"<<endl;c=a;cout<<c;cout<<"--------------------------"<<endl;//(4)测试:整数左乘矩阵,计算a1*c并输出cout<<"测试整数左乘矩阵"<<endl;cout<<"整数为:"<<a1<<endl;cout<<"矩阵为:"<<endl<<c;cout<<"整数左乘矩阵结果如下:"<<endl;cout<<a1*c;cout<<"--------------------------"<<endl;//(5)测试:整数右乘矩阵,计算c*a2并输出cout<<"测试整数右乘矩阵"<<endl;cout<<"整数为:"<<a2<<endl;cout<<"矩阵为:"<<endl<<c;cout<<"整数右乘矩阵结果如下:"<<endl;cout<<c*a2;cout<<"--------------------------"<<endl;//(6)测试:前置自增++,计算d=++c并输出cout<<"测试前置自增++"<<endl;cout<<"c的初始值如下:"<<endl;cout<<c;cout<<"d=++c执行之后结果如下:"<<endl;d=++c;cout<<"c的结果如下:"<<endl;cout<<c;cout<<"d的结果如下:"<<endl;cout<<d;cout<<"--------------------------"<<endl;//(7)测试:后置自增++,计算e=c++并输出cout<<"测试后置自增++"<<endl;cout<<"c的初始值如下:"<<endl;c=a;cout<<c;cout<<"e=c++执行之后结果如下:"<<endl;e=c++;cout<<"c的结果如下:"<<endl;cout<<c;cout<<"e的结果如下:"<<endl;cout<<e;cout<<"--------------------------"<<endl;return 0;
}

源码

#include <iostream>using namespace std;class Matrix
{
private:int matrix[2][3];public:Matrix(int a = 0, int b = 0, int c = 0, int d = 0, int e = 0, int f = 0){matrix[0][0] = a;matrix[0][1] = b;matrix[0][2] = c;matrix[1][0] = d;matrix[1][1] = e;matrix[1][2] = f;}friend istream& operator>>(istream& in, Matrix& m);friend ostream& operator<<(ostream& out, const Matrix& m);Matrix operator+(const Matrix& other);Matrix operator*(int num);friend Matrix operator*(int num, const Matrix& m);Matrix& operator=(const Matrix& other);Matrix& operator++();Matrix operator++(int);
};istream& operator>>(istream& in, Matrix& m)
{for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){in >> m.matrix[i][j];}}return in;
}ostream& operator<<(ostream& out, const Matrix& m)
{for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){out << m.matrix[i][j] << " ";}out << endl;}return out;
}Matrix Matrix::operator+(const Matrix& other)
{Matrix result;for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){result.matrix[i][j] = matrix[i][j] + other.matrix[i][j];}}return result;
}Matrix Matrix::operator*(int num)
{Matrix result;for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){result.matrix[i][j] = matrix[i][j] * num;}}return result;
}Matrix operator*(int num, const Matrix& m)
{Matrix result;for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){result.matrix[i][j] = m.matrix[i][j] * num;}}return result;
}Matrix& Matrix::operator=(const Matrix& other)
{for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){matrix[i][j] = other.matrix[i][j];}}return *this;
}Matrix& Matrix::operator++()
{for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){matrix[i][j]++;}}return *this;
}Matrix Matrix::operator++(int)
{Matrix temp = *this;++(*this);return temp;
}int main()
{Matrix a(1, 2, 3, 4, 5, 6), b(6, 5, 4, 3, 2, 1), c, d, e;int a1 = 2, a2 = 3;//用于测试数乘运算时用到的整数//(1)测试:>>,输入a和b//a的值如下://	1	1	1//	2	2	2//b的值如下://	3	2	1//	6	5	4cout << "请输入a和b" << endl;cin >> a >> b;cout << "--------------------------" << endl;//(2)测试:<<,输出a和b//输出结果格式://a的值如下:(b与a类似)//	1 1 1//	2 2 2cout << "a的值如下:" << endl;cout << a << endl;cout << "b的值如下:" << endl;cout << b << endl;cout << "--------------------------" << endl;//(3)测试:+,并输出a+b的结果cout << "a+b的结果如下:" << endl;cout << a + b << endl;cout << "--------------------------" << endl;//(4)测试:=,将a赋给c,并输出ccout << "执行c=a之后,c的值如下:" << endl;c = a;cout << c;cout << "--------------------------" << endl;//(4)测试:整数左乘矩阵,计算a1*c并输出cout << "测试整数左乘矩阵" << endl;cout << "整数为:" << a1 << endl;cout << "矩阵为:" << endl << c;cout << "整数左乘矩阵结果如下:" << endl;cout << a1 * c;cout << "--------------------------" << endl;//(5)测试:整数右乘矩阵,计算c*a2并输出cout << "测试整数右乘矩阵" << endl;cout << "整数为:" << a2 << endl;cout << "矩阵为:" << endl << c;cout << "整数右乘矩阵结果如下:" << endl;cout << c * a2;cout << "--------------------------" << endl;//(6)测试:前置自增++,计算d=++c并输出cout << "测试前置自增++" << endl;cout << "c的初始值如下:" << endl;cout << c;cout << "d=++c执行之后结果如下:" << endl;d = ++c;cout << "c的结果如下:" << endl;cout << c;cout << "d的结果如下:" << endl;cout << d;cout << "--------------------------" << endl;//(7)测试:后置自增++,计算e=c++并输出cout << "测试后置自增++" << endl;cout << "c的初始值如下:" << endl;c = a;cout << c;cout << "e=c++执行之后结果如下:" << endl;e = c++;cout << "c的结果如下:" << endl;cout << c;cout << "e的结果如下:" << endl;cout << e;cout << "--------------------------" << endl;return 0;
}

结果示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/301758.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年网络安全趋势前瞻:从AI攻击到云安全新挑战

随着2024年开展新的序幕&#xff0c;网络安全领域正面临着前所未有的挑战与机遇&#xff0c;一系列引人注目的趋势和预测逐渐浮出水面。 一、AI技术发展引发的安全问题 近年来&#xff0c;我们见证了AI技术的飞速进步&#xff0c;其中ChatGPT等引领潮流的AI服务成为公众瞩目的…

数据结构__顺序表

概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组上完成数据的增删查改 需要用到数组&#xff1a;数组的绝对优势&#xff1a;下标的随机访问&#xff08;因为物理空间连续&#xff09; a[i]等…

git 常用命令和使用方法

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…

IoT数采平台4:测试

IoT数采平台1&#xff1a;开篇IoT数采平台2&#xff1a;文档IoT数采平台3&#xff1a;功能IoT数采平台4&#xff1a;测试 Modbus RTU串口测试 OPC测试 HTTP测试 MQTT透传测试 MQTT网关测试及数据上报 TCP / UDP 监听&#xff0c;客户端连上后发送信息&#xff0c;客户端上报数据…

Linux从入门到精通 --- 4(下).网络请求和下载、端口、进程管理、主机状态监控、环境变量、文件的上传和下载、压缩和解压

文章目录 第四章(下)&#xff1a;4.8 网络请求和下载4.8.1 ping4.8.2 wget4.8.3 curl 4.9 端口4.9.1 查看端口占用 4.10 进程管理4.10.1 查看进程4.10.2 查看指定进程4.10.3 关闭进程 4.11 主机状态监控4.11.1 查看系统资源占用4.11.2 top交互式选项4.11.3 磁盘信息监控4.11.4 …

uniapp-设置UrlSchemes从外部浏览器H5打开app

需求&#xff1a;外部浏览器H5页面&#xff0c;跳转到uniapp开发的原生app内部。 1、uniapp内部的配置&#xff1a; &#xff08;1&#xff09;打开manifest->App常用其他设置&#xff0c;如下&#xff0c;按照提示输入您要设置的urlSchemes&#xff1a; &#xff08;2&am…

数据库关系模式三元及以上分解无损连接判断(表格法)

例题 1.首先构造初始表&#xff0c;如下表所示。 A B C D E ABC a1 a2 a3 b14 b15 CD b21 b22 a3 a4 b15 DE b31 b32 b33 a4 a5 2.遍历函数依赖&#xff0c;对AB→C&#xff0c;因各元组的第一、二列没有相同的分量&#xff0c;所以表不改变。 3.由C→D…

MacOS Docker 部署 Redis 数据库

一、简介 Redis是一个开源的、使用C语言编写的、基于内存亦可持久化的Key-Value数据库&#xff0c;它提供了多种语言的API&#xff0c;并支持网络交互。Redis的数据存储在内存中&#xff0c;因此其读写速度非常快&#xff0c;每秒可以处理超过10万次读写操作&#xff0c;是已知…

Java设计模式—策略模式(商场打折)

策略这个词应该怎么理解&#xff0c;打个比方说&#xff0c;我们出门的时候会选择不同的出行方式&#xff0c;比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等&#xff0c;这些出行方式&#xff0c;每一种都是一个策略。 再比如我们去逛商场&#xff0c;商场现在正在搞活动&…

面试总结------2024/04/04---项目

1.面试官提问&#xff1a;你说你在项目中使用springsecurity jwt 实现了登录功能&#xff0c;能简单讲一下怎么实现的吗&#xff1f; 2.使用RabbitMQ实现订单超时取消功能 redis实现的劣势 订单状态定义 首先&#xff0c;我们需要定义订单的不同状态。在这个示例中&#xf…

深入解析template,掌握C++模板的精髓!

掌握C模板&#xff08;template&#xff09;的优雅之道&#xff01; 一、什么是模板&#xff1f;二、模板如何工作&#xff1f;三、C 中的模板类型3.1、 类模板3.2、 函数模板 四、模板参数推导4.1、模板参数推导示例4.2、函数模板参数推导4.3、类模板参数推导&#xff08;C17 …

vivado 配置存储器器件编程2

为双 QSPI (x8) 器件创建配置存储器文件 您可使用 write_cfgmem Tcl 命令来为双 QSPI (x8) 器件生成 .mcs 镜像。此命令会将配置数据自动拆分为 2 个独立 的 .mcs 文件。 注释 &#xff1a; 为 SPIx8 生成 .mcs 时指定的大小即为这 2 个四通道闪存器件的总大小。…

缓存雪崩以及解决思路

缓存雪崩&#xff1a;缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 解决方案&#xff1a; 给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降级限流策略 给业务…

HarmonyOS实战开发DLP-如何实现一个安全类App。

介绍 本示例是一个安全类App&#xff0c;使用ohos.dlpPermission 接口展示了在eTS中普通文件加密受限的过程。 效果预览 使用说明: 1.启动应用后点击“”按钮可以添加一个普通文件; 2.长按点击加密按钮&#xff0c;出现加密权限弹窗&#xff0c;选择需要设置的权限并点击确定…

二维相位解包理论算法和软件【全文翻译- 掩码(3.4)】

本节我们将研究从质量图中提取掩码的问题。掩码是一个质量图,其像素只有两个值:0 或 1。零值像素标志着质量最低的相位值,这些相位值将被屏蔽、零权重或忽略。第 5 章中的某些 L/ 正则算法需要使用掩码来定义零权重。掩码还可用于某些路径跟踪算法,如第 4.5 节中将要介绍的…

C语言从入门到实战————编译和链接

目录 前言 1. 翻译环境和运行环境 2. 翻译环境 2.1 预处理&#xff08;预编译&#xff09; 2.2 编译 2.2.1 词法分析&#xff1a; 2.2.2 语法分析 2.2.3 语义分析 2.3 汇编 2.4 链接 3. 运行环境 前言 编译和链接是将C语言源代码转换成可执行文件的必经过程&a…

VMware Esxi安装群辉系统

群晖的网络存储产品具有强大的操作系统&#xff0c;提供了各种应用程序和服务&#xff0c;包括文件共享、数据备份、多媒体管理、远程访问等。用户可以通过简单直观的界面来管理他们的存储设备&#xff0c;并且可以根据自己的需求扩展设备的功能。总的来说&#xff0c;群晖的产…

Xinstall助力提升用户体验:一键打开App用户页面

在移动互联网时代&#xff0c;App已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;随着App数量的激增&#xff0c;如何让用户更便捷地打开和使用App&#xff0c;提升用户体验&#xff0c;成为了开发者和广告主们亟待解决的问题。此时&#xff0c;Xinstall作为国内专业…

vue前端项目到后端执行逻辑——自己改的话要怎么改

文章目录 vue前端项目到后端流程——自己改的话要怎么改 vue前端项目到后端流程——自己改的话要怎么改

【MySQL数据库 | 第二十三篇】什么是索引覆盖和索引下推

前言&#xff1a; 在数据库查询优化领域&#xff0c;索引一直被视为关键的工具&#xff0c;用于提高查询性能并加速数据检索过程。然而&#xff0c;随着数据库技术的不断发展&#xff0c;出现了一些新的优化技术&#xff0c;其中包括索引下推&#xff08;Index Pushdown&#…