C++编程入门--矩阵类重载运算符

2023-11-17

题目:定义3×3矩阵类Matrix,在其中重载运算符“+”、“-”、“*”,实现矩阵的基本运算。

首先,我们先确定这个矩阵类的基本功能,我们来声明其成员函数的功能,列出来如下:

#include<iostream>
using namespace std;

class Matrix{       //矩阵类
private:
	int row, column;        //成员变量行和列
	int pt[10][10];         //定义一个最大为10×10的矩阵
public:
	Matrix();				//构造函数初始化矩阵行和列
	Matrix(int r, int c);
	~Matrix();
	Matrix operator+(Matrix &x);		  //矩阵+运算,双目
	Matrix operator-(Matrix &x);		  //矩阵-运算,双目
	Matrix operator*(const Matrix &x);    //矩阵*运算,双目
	Matrix operator=(const Matrix &x);    //声明重载“=”运算符
	void Set_rowcol(int m,int n);         //设置矩阵行和列
	void SetMatrix();					  //设置矩阵元素
	void ShowMatrix();					  //输出矩阵
};

确定好类的基本功能之后,我们来逐个实现:

首先是构造函数系列:

Matrix::Matrix(){						  //构造函数初始化矩阵行和列
	row = 0; column = 0;
}
Matrix::Matrix(int r, int c) :row(r), column(c){   //构造函数重载,初始化矩阵元素
	for (int i = 0; i < row; i++)
		for (int j = 0; j < column; j++)
			pt[i][j] = 0;
}
Matrix::~Matrix(){}   //析构函数

运算符重载实现:

    Matrix Matrix::operator+(Matrix &x){    //矩阵+运算,双目运算符
	Matrix temp(row, x.column);
	for (int i = 0; i < row; i++){
		for (int j = 0; j < column; j++)
			temp.pt[i][j] = pt[i][j] + x.pt[i][j];
	}
	return temp;
}
Matrix Matrix::operator-(Matrix &x){    //矩阵-运算,双目运算符
	Matrix temp(row, x.column);
	for (int i = 0; i < row; i++){
		for (int j = 0; j < column; j++)
			temp.pt[i][j] = pt[i][j] - x.pt[i][j];
	}
	return temp;
}
Matrix Matrix::operator*(const Matrix &x){    //矩阵*运算,双目运算符
	Matrix temp(row, x.column);
	for (int i = 0; i < row; i++){
		for (int j = 0; j < x.column; j++){
			for (int k = 0; k < column; k++)
				temp.pt[i][j] += pt[i][k] * x.pt[k][j];
		}
	}
	return temp;
}
Matrix Matrix::operator=(const Matrix &x){  //复制运算符=重载,只能重载为成员函数
	for (int i = 0; i < row; i++)
		for (int j = 0; j < column; j++)
			(*this).pt[i][j] = x.pt[i][j];
	return *this;
}

然后就是矩阵的输入和输出函数功能实现:

void Matrix::Set_rowcol(int m,int n){
	row = m;
	column = n;
}

void Matrix::SetMatrix(){      //设置矩阵元素
	for (int i = 0; i < row; i++){
		for (int j = 0; j < column; j++){
			cin >> pt[i][j];
		}
	}
}
void Matrix::ShowMatrix(){     //输出矩阵
	for(int i = 0; i < row; i++)
	{
		for (int j = 0; j < column; j++)
			cout << pt[i][j] << " ";
		cout << endl;
	}
}

最后编写主函数测试:

int main(){
	int i1, j1, i2, j2;
	Matrix m1, m2, m3;

	cout << "输入第一个矩阵m1的行和列:" << endl;
	cin >> i1 >> j1;
	m1.Set_rowcol(i1, j1);
	cout << "请输入第一个矩阵m1元素:" << endl;
	m1.SetMatrix();

	cout << "输入第二个矩阵m2的行和列:" << endl;
	cin >> i2 >> j2;
	m2.Set_rowcol(i2, j2);
	cout << "请输入第二个矩阵m2元素:" << endl;
	m2.SetMatrix();

	m3.Set_rowcol(i1, j2);  //结果矩阵的行是m1的行,列是m2的列

	m3 = m1 + m2;
	cout << "m3=m1+m2:" << endl;
	m3.ShowMatrix();

	m3 = m1 - m2;
	cout << "m3=m1-m2:" << endl;
	m3.ShowMatrix();

	m3 = m1 * m2;
	cout << "m3=m1*m2:" << endl;
	m3.ShowMatrix();
	return 0;
}

运行结果:

这个程序中间其实还是有很多瑕疵的,但是我们今天的主题是运算符的重载,还有矩阵列类的实现,请忽略或提出建议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++编程入门--矩阵类重载运算符 的相关文章

  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem

随机推荐

  • 转载--我与英语技术书籍

    原文 http www cnblogs com KnightsWarrior p EnglishTechBooks html 我与英语技术书籍 2013 09 05 00 01 by 圣殿骑士 17877 阅读 122 评论 收藏 编辑 前
  • 优达学城《DeepLearning》2-1:卷积神经网络

    本次由3部分组成 可视化卷积神经网络 设计和训练一个CNN来对MNIST手写数字分类 设计并训练一个CNN来对CIFAR10数据集中的图像进行分类 本次遇到的深度学习核心概念 SGD优化器 GD就是梯度下降 Gradient Descent
  • 【SpringCloud】Ribbon定制化配置

    文章目录 使用Ribbon自带负载均衡算法 添加负载均衡算法Configuration RestTemplate使用上面负载均衡算法 自定义负载均衡算法 负载均衡算法实现 RestTemplate 在Controller中使用该负载均衡算法
  • SLIP, PPP, L2F ,PPTP, L2TP的简介以及关联

    都是网络连接的方式 其中又分为两大类 拨号连接 dialup 和虚拟私人网络 virtual private network 俗称VPN 依旧用我的浅薄而又粗俗的言语来向大家解释一下 如有错误 尽情打脸 拨号连接 Dalup 包含两种连接方
  • Tim定时器学习打卡

    通用定时器 TIM2 TIM3 TIM4和TIM5 1 主要功能 16位向上 向下 向上 向下自动装载计数器 16位可编程 可以实时修改 预分频器 计数器时钟频率的分频系数为1 65536之间的任意 数值 4个独立通道 输入捕获通道 输出比
  • 【Sql语句】创建表、修改、删除表,增添列、删除列

    编写以下语句 1 创建dept表 2 创建emp表 3 将列Last name的长度增加到50 4 根据表emp创建employees2 5 删除表employees2 6 在表dept和emp中添加新列test column 并检查所作的
  • Windows桌面文件夹删除被提示“找不到该项目”——顽固目录、文件的删除

    注意 若转载 请贴上链接 https blog csdn net qq 41042595 article details 112576438 如若发现抄袭或未标明来源现象 都可举报反馈 文章目录 问题来源场景 原因分析 解决方案 步骤一 1
  • Java创建文件和文件夹

    创建文件和文件夹 有异常 抛出或捕获IOException 如果文件 文件夹 存在则不创建 也不会覆盖文件中的内容 createNewFile 方法创建一个普通文件 使用mkdir 方法创建一个文件夹 使用mkdirs 方法创建多级文件夹
  • Android不同版本SD卡存储权限解决

    1 Android6 0之前 6 0之前是不需要动态申请权限的 直接在manifest中申请即可以正常使用
  • gulp基础:gulptask

    var gulp require gulp var browserify require gulp browserify 模块化的打包 var uglify require gulp uglify js的压缩 var webserver r
  • Mysql设计学生宿舍管理系统+考勤系统

    一 学生宿舍管理系统 要求 学校宿舍管理系统 要求包含宿舍信息 学生信息 每日的宿舍查房记录 分析 学生与宿舍的关系 m 1 宿舍的查房记录是根据宿舍来查的 与宿舍有关系 一个宿舍可以多次查房 宿舍与查房记录是1 m的关系 宿舍信息表 cr
  • 浅谈什么是大数据

    浅谈什么是大数据 有人可能发现了 我这个专栏写的就是大数据 所以我们一起来谈谈大数据 大数据概念 百度百科 对于 大数据 Big data 研究机构Gartner给出了这样的定义 大数据 是需要新处理模式才能具有更强的决策力 洞察发现力和流
  • 基于BCM53262交换芯片平台的Linux操作系统移植(一)编译环境

    2018 05 10 09 26 zhoulinhua 2018 05 10 一 源码 相关链接 http www at91 com linux4sam bin view Linux4SAM 1 a91bootstrap源码获取 git c
  • C++ 外观模式

    include
  • redhat 6.4安装oracle11g RAC (四)

    创建集群数据库 在节点rac1上用oracle用户执行dbca创建RAC数据库 root rac1 su oracle oracle rac1 dbca 选择创建数据库 自定义数据库 也可以是通用 配置类型选择Admin Managed 输
  • 微信小程序使用npm安装包

    小程序现在支持直接通过npm安装包了 点击这里了解更多 记录一下我自己的安装步骤及安装过程中遇到的一些问题 希望能够帮助到正在阅读此篇文章的你 我就直接通过在项目根目录安装miniprogram datepicker做演示了 1 在项目根目
  • SIMD优化之ARM纯汇编开发

    ARM纯汇编开发 注 这篇文章是两年前写的 现在更新到CSDN 当时认知不足 其中可能有不少错误 敬请行家指正 为什么要用纯汇编 开发效率高 这里可能让很多人大跌眼镜了 纯汇编开发效率高 首先 这个是有限定条件的 需要反复调优的重度运算场景
  • selenium读取excel中的数据实现自动登录

    一 当用selenium实现自动登录时 测试不同账号的登录 1 可以写一个登录方法login driver username password 对每一个账号分别写一个方法test zhnagshan log 然后将数据传入到登录方法logi
  • 【自动驾驶技术】优达学城无人驾驶工程师学习笔记(六)——Github与Markdown相关教程

    Github与Markdown相关教程 本博文为笔者关于优达学城无人驾驶工程师课程中计算机视觉基础部分的学习笔记 该部分为实现车道线图像识别功能的基础课程 关于本课程的详细说明请参考优达学城官网 优达学城为学员提供了一个简短的Github教
  • C++编程入门--矩阵类重载运算符

    题目 定义3 3矩阵类Matrix 在其中重载运算符 实现矩阵的基本运算 首先 我们先确定这个矩阵类的基本功能 我们来声明其成员函数的功能 列出来如下 include