定义一个Matrix类,实现矩阵的加法和乘法

#include<iostream>
using namespace std;

class Matrix
{
    int row;//矩阵的行
    int col;//矩阵的列
    int **a;//保存二维数组的元素
public:
    Matrix();//默认构造函数
    Matrix(int r, int c);
    Matrix(const Matrix &is);//拷贝构造函数
    void Madd(const Matrix &is);//矩阵加
    Matrix Mmul(const Matrix &is);//矩阵乘
    void display();//显示矩阵元素
};

Matrix::Matrix(int r, int c)
{
    row = r;
    col = c;
    a = (int **)malloc(sizeof(int*)*row);
    for (int r = 0; r < row; r++)
    {
        *(a + r) = (int*)malloc(sizeof(int)*col);
    }
    printf("请输入数:\n");
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col; j++)
            cin >> a[i][j];
}

Matrix::Matrix(const Matrix & is)
{//拷贝构造函数
    row = is.row;
    col = is.col;
    a = new int*[row];
    for (int i = 0; i < row; i++)
    {
        a[i] = new int[col];
    }
    a = is.a;
}

void Matrix::Madd(const Matrix & is)
{
    if (row != is.row || col != is.col)//判断两矩阵是否符合相加条件
    {
        cout << "相加的矩阵必须行和列一致";
    }
    else
    {
        for (int i = 0; i < row; i++)
        {
            for (int j = 0; j < col; j++)
            {
                a[i][j] += is.a[i][j];
            }
        }
    }
}

Matrix Matrix::Mmul(const Matrix & is)
{
    Matrix M3(this->row, is.col);
    if (this->col != is.row)//判断是否符合相乘条件
    {
        cout << "不符合两矩阵相乘的条件";
    }
    else
    {
        for (int i = 0; i < M3.row; i++)
        {
            for (int j = 0; j < M3.col; j++)
            {
                M3.a[i][j] = 0;
                for (int n = 0; n < is.row; n++)
                {
                    M3.a[i][j] += this->a[i][n] * is.a[n][j];
                }
            }
        }
    }
    return M3;
}

void Matrix::display()
{//输出矩阵
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;
}

int main()
{
    Matrix m1(3, 3);
    m1.display();
    Matrix m2(3, 3);
    m2.display();
    Matrix m3(3, 2);
    m3.display();
    cout << "m1+m2=" << endl;
    m1.Madd(m2);
    m1.display();
    Matrix m4(m1.Mmul(m3));
    cout << "m1*m3=" << endl;
    m4.display();
    system("pause");
    return 0;
}

运行结果:

时间: 2024-08-29 10:11:19

定义一个Matrix类,实现矩阵的加法和乘法的相关文章

java定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积

需求如下:(1)定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积. (2)定义一个类PassObject,在类中定义一个方法printAreas(),该方法的定义如下: public void printAreas(Cirlce c, int times) 在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积.例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积. 在main方法

定义一个长方形类,定义 求周长和面积的方法实例

/* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: import必须出现在所有的class前面.*/ import java.util.Scanner; class ChangFangXing { //长方形的长 private int length; //长方形的宽 private int width; public ChangFangXing(){} //

定义一个Rectangle类,该类提供getLength和getWidth方法。

import java.util.Comparator; /** * 定义一个Rectangle类,该类提供getLength和getWidth方法.利用图1-18中的findMax例程编写 * 一种main方法,该方法创建一个Rectangle数组并首先找出依面积最大的Rectangle对象,然后 * 找出依周长最大的Rectangle对象. * @author wulei */public class RectangleTest { /** * 构造一个矩形 */ private int w

【OC复合题】之定义一个学生类,需要有姓名,年龄,考试成绩三个成员属性,创建5个对象,属性可以任意值。(Objective-C)

题目: 定义一个学生类,需要有姓名,年龄,考试成绩三个成员属性,创建5个对象,属性可以任意值.(Objective-C) 1)    不使用@property,手动编写他们的访问器方法(getter和setter),注意内存管理(手动管理内存) 2)    增加一个便利构造器(快速构造器) 3)    使用NSLog输出学生对象时,输出信息格式为:My Name Is XXX  Age Is XXX Score Is XXX 4)    对5个学生对象按照成绩->年龄->姓名优先级排序(成绩相

python全栈系列之---定义一个session类

首先:注意cookie中的get_cookie是返回字符串,而get_secure_cookie返回的是字节类型 #self.get_secure_cookie() #The decoded cookie value is returned as a byte string (unlike #`get_cookie`). md5加密获取的十六进制也是返回的字符串类型 import hashlib import time obj = hashlib.md5() obj.update(bytes(s

类的继承定义一个computer类在此基础上派生出两个子类(继承与多态绑定)

题目如下 定义一个计算机类(Computer),并在它的基础上派生出两个子类:台上机(Desktop)和便携机类(Notebook),在Computer中定义几个方法,并在子类Desktop和Notebook中覆盖这些方法.在main方法中利用对象类型转换将类Desktop和Notebook的对象分别赋值给Computer对象,并应用多态调用这些方法. 实验目的 (1)       理解继承的概念,掌握继承的语法. (2)       学习定义和使用子类. (3)       掌握继承过程中的方

实验四 (1):定义一个形状类(Shape)方法:计算周长,计算面积

(1)定义一个形状类(Shape)方法:计算周长,计算面积子类:矩形类(Rectangle) :额外的方法:differ() 计算长宽差圆形类(Circle)三角形类(Triangle)正方形类(Square) 矩形的子类生成几个不同的形状对象,放在一个Shape类型的数组里,分别求每个形状的周长和面积.如果形状对象是一个矩形,且不是正方形,则计算长宽差. 1 package com.tiger.practice; 2 3 class Shape { 4 5 public double leng

C++:如何正确的定义一个接口类

C++中如何定义接口类?首先给接口类下了定义:接口类应该是只提供方法声明,而自身不提供方法定义的抽象类.接口类自身不能实例化,接口类的方法定义/实现只能由接口类的子类来完成. 而对于C++,其接口类一般具有以下特征: 1.最好不要有成员变量,但可以有静态常量(static const或enum)2.要有纯虚接口方法3.要有虚析构函数,并提供默认实现4.不要声明构造函数 如下就是一个最简单的例子: class Testable{public: static const int START = 1;

065、Java面向对象之定义一个Book类,在主类中使用Book类

01.代码如下: package TIANPAN; class Book { // 定义一个新的类 String title; // 书的名字 double price; // 书的价格 public void getInfo() { // 此方法将由对象调用 System.out.println("图书名称:" + title + ",价格:" + price); } } /** * 此处为文档注释 * * @author 田攀 微信382477247 */ pu