栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++:矩阵运算和重载运算符(C++实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++:矩阵运算和重载运算符(C++实现)

设计方阵类Square,其结构如下:

class Square{

 private:

        int n;                                                                    //方阵的行列数

        int *data;                                                             //用于存放方阵n*n个数据的数据区

public:

        Square(int m);                                                    //m是行列数,将方阵的每个数据设置为0

        Square(int m, int *d);                                          //m是行列数,d是指向初始化数据区的指针

        Square operator *(const Square & );                 //重载矩阵*运算符

        Square operator =(const Square &);                 //重载矩阵=运算符

        void print();                                                        //显示矩阵的内容

};

void Square::print()

{

        int i,j;

        for(i = 0; i < n; i++)

        {

                 for(j =0; j < n; j++)

                         cout << data[i*n+j] << " ";

                 cout << endl;

        }

}

main函数

int main( )

{

        int d1[5][5] = {{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,9,3,4,5},{1,2,3,4,5}};

        int d2[5][5] = {{5,4,3,2,1},{1,4,3,2,1},{5,4,3,2,1},{5,4,3,2,1},{2,4,7,2,1}};

        Square a(5,(int *)d1),b(5,(int *)d2),c(5);

        c = a * b;

        c.print();

}

矩阵乘法规则:

矩阵与矩阵相乘 第一个矩阵的列数一必须等于第二个矩阵的行数 假如第一个是m*n的矩阵 第二个是n*p的矩阵 则结果就是m*p的矩阵 且得出来的矩阵中元素具有以下特点:
第一行第一列元素为第一个矩阵的第一行的每个元素和第二个矩阵的第一列的每个元素乘积的和 以此类推 第i行第j列的元素就是第一个矩阵的第i行的每个元素与第二个矩阵第j列的每个元素的乘积的和。

代码如下:

using namespace std;
#include

class Square{
private:
	int n; 
	int *data;
public:
	Square(int m);          
	Square(int m, int *d);   
	Square operator *(const Square &d);  
	Square operator =(const Square &d); 
	void print();                       
};
Square::Square(int m){
	n=m;
	data=new int[n*n];
	for(int i=0;i{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,9,3,4,5},{1,2,3,4,5}};
	int d2[5][5] = {{5,4,3,2,1},{1,4,3,2,1},{5,4,3,2,1},{5,4,3,2,1},{2,4,7,2,1}};
	Square a(5,(int *)d1),b(5,(int *)d2),c(5);
	c = a * b;
	c.print();
}

运算结果:

 小结:

这道题目的难点之一就是,搞懂矩阵的乘法规则,逐行逐列逐项的去相乘。其次就是要注意,在有指针的情况下,拷贝构造函数需要深拷贝,否则会报错。重载运算符的话,并不是很难,注意重载=时,返回自身*this。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864022.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号