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

目录

题目

源码

结果示例


题目

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

说明:

  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.mzph.cn/news/801845.shtml

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

相关文章

SpringBoot学习笔记(一)

SpringBootSpringBoot学习笔记&#xff08;一&#xff09; 1.SpringBoot配置2.yml3.SpringBoot配置&#xff08;1&#xff09;Value注解获取配置参数&#xff08;2&#xff09;Environment获取配置参数&#xff08;3&#xff09;ConfigurationProperties方式&#xff08;4&…

使用 Meltano 将数据从 Snowflake 导入到 Elasticsearch:开发者之旅

作者&#xff1a;来自 Elastic Dmitrii Burlutskii 在 Elastic 的搜索团队中&#xff0c;我们一直在探索不同的 ETL 工具以及如何利用它们将数据传输到 Elasticsearch&#xff0c;并在传输的数据上实现 AI 助力搜索。今天&#xff0c;我想与大家分享我们与 Meltano 生态系统以及…

【汇编】_Visual Studio2019写32位汇编

目录 第一步&#xff1a;创建新项目 1. 空项目—下一步 2. 选择位置—填写项目名—创建 第二步&#xff1a;项目生成依赖项 1. 右击项目名—生成依赖项—生成自定义 2. 选中masm—确定 第三步&#xff1a;创建源文件 1. 源文件—添加—新建项 2. 选择C文件—创建新文件…

Android Studio中查看和修改project的编译jdk版本

android studio中查看和修改project的编译jdk版本操作如下&#xff1a; File->settings->Build,Execution,deployment->Build Tools->Gradles 进入Gradles页面可以查看并修改project的编译jdk版本&#xff0c;如图所示

安卓远离手机app

软件介绍 远离手机是专门为防止年轻人上瘾而打造的生活管理类的软件,适度用手机&#xff0c;保护眼睛&#xff0c;节约时间。 下载 安卓远离手机app

设计模式之解释器模式讲解

概念&#xff1a;是一种按照规定语法对表达式进行解析的方案。给定一门语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;该解释器使用该表示来解释语言中的句子。 抽象表达式&#xff1a;定义表达式需要实现的操作。终结符表达式&#xff1a;实…

Python学习从0到1 day21 第二阶段 面向对象 ④ 类型注解

仗剑红尘已是癫&#xff0c;有酒平步上青天 —— 24.4.7 一、变量的类型注解 学习目标 1.理解为什么使用类型注解 2.掌握变量的类型注解语法 为什么使用类型注解 tip&#xff1a;CTRLP&#xff0c;可以提示函数中传入的参数 当我们需要使用pycharm的自动补全功能&#xff0c;又…

Google视觉机器人超级汇总:从RT、RT-2到AutoRT/SARA-RT/RT-Trajectory、RT-H

前言 随着对视觉语言机器人研究的深入&#xff0c;发现Google的工作很值得深挖&#xff0c;比如RT-2 ​想到很多工作都是站在Google的肩上做产品和应用&#xff0c;​Google真是科技进步的核心推动力&#xff0c;做了大量大模型的基础设施&#xff0c;服(推荐重点关注下Googl…

Excel 多选实现

代码 Private Sub Worksheet_Change(ByVal Target As Range) Dim rngDV As Range Dim oldVal As String Dim newVal As String If Target.Count > 1 Then GoTo exitHandlerOn Error Resume Next Set rngDV Cells.SpecialCells(xlCellTypeAllValidation) On Error GoTo exi…

Cherno CPP学习笔记-01-背景知识

0、工具网站收集 C语言版本特性 https://en.cppreference.com https://www.cplusplus.com https://www.tutorialspoint.com/cplusplus https://www.learncpp.com https://github.com/fffaraz/awesomecpp https://stackoverflow.com 网页CPP编译器 [C] gcc 12.1.0 - Wa…

设计模式之状态模式讲解

概念&#xff1a;又称为状态对象模式&#xff0c;该模式允许一个对象在其内部状态改变时改变其行为。状态模式的核心是封装&#xff0c;状态的变更引起行为的变动&#xff0c;从外部看来就好像该对象对应的类发生改变一样。 抽象状态&#xff1a;用以封装环境对象的一个特定状态…

Qt使用插件QPluginLoader 机制开发

简介&#xff1a; 插件(Plug-in,又称addin、add-in、addon或add-on,又译外挂)是一种遵循一定规范的应用程序接口编写出来的程序。 Qt 提供了2种APIs来创建插件&#xff1a; 一种高级API&#xff0c;用于为Qt本身编写插件&#xff1a;自定义数据库驱动程序&#xff0c;图像格…

计算机网络-运输层

运输层 湖科大计算机网络 参考笔记&#xff0c;如有侵权联系删除 概述 运输层的任务&#xff1a;如何为运行在不同主机上的应用进程提供直接的通信服务 运输层协议又称端到端协议 运输层使应用进程看见的好像是在两个运输层实体之间有一条端到端的逻辑通信信道 运输层为应…

导出加入域控的电脑清单

要导出加入域控的所有电脑清单&#xff0c;包括计算机名等基本信息&#xff0c;可以使用 PowerShell 中的 Get-ADComputer cmdlet。下面是一个基础示例脚本&#xff0c;用于从Active Directory (AD)中批量导出所有加入域的计算机名称及可能的其他相关信息&#xff0c;并将其保存…

嘉轩智能工业科技诚邀您参观2024第13届生物发酵展

参展企业介绍 自2005年成立以来&#xff0c;嘉轩一直致力于工业智能永磁滚筒的研发、制造及销售&#xff0c;具有十多年的从业经验&#xff0c;公司主营产品包括工业智能永磁滚筒、机电智能诊断、工业智能电机等&#xff0c;高效智能自驱动永磁滚筒为我公司目前主导产品&#x…

thinkphp6使用阿里云SDK发送短信

使用composer安装sdk "alibabacloud/dysmsapi-20170525": "2.0.24"封装发送短信类 发送到的短信参数写在env文件里面的 #发送短信配置 [AliyunSms] AccessKeyId "" AccessKeySecret "" signName"" templateCode"&…

第一部分 Vue讲解(代码版)

1.第一个vue实例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…

Android Activity 介绍

Activity Activity 是一个应用组件&#xff0c;用户可与其提供的屏幕进行交互&#xff0c;以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕&#xff0c;但也可小于屏幕并浮动在其他窗口之…

性能优化 - 你知道开发React项目中,可以做哪些性能优化吗

难度级别:中高级及以上 提问概率:75% 在React项目开发中,面临着比较大的问题就是组件更新以及重复渲染的问题,基于这两点,我们可以在日常开发工作中,可以通过以下几点,来提升React的性能,加快组件更新对比,避免过多的重复渲染问题。 …

刷题DAY48 | LeetCode 198-打家劫舍 213-打家劫舍II 337-打家劫舍III

198 打家劫舍&#xff08;medium&#xff09; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统…