#include<iostream> using namespace std; class Matrix { private: int* p; int rows, cols; public: Matrix(int r, int c) { rows = r; cols = c; p = new int[rows * cols]; } Matrix(Matrix& b) { rows = b.rows; cols = b.cols; p = new int[rows * cols]; for (int i = 0; i < rows * cols; i++) { p[i] = b.p[i]; } } void input() { cout << "请输入数组值:" << endl; for (int i = 0; i < rows * cols; i++) { cin >> p[i]; } } Matrix operator+(Matrix& b) { Matrix c(rows, cols); for (int i = 0; i < rows * cols; i++) { c.p[i] = p[i] + b.p[i]; } return c; } Matrix operator=(Matrix& b) { rows = b.rows; cols = b.cols; p = new int[rows * cols]; for (int i = 0; i < rows * cols; i++) { p[i] = b.p[i]; } } void show() { cout << "数组值为:" << endl; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { cout << p[i * cols + j] << " "; } cout << endl; } } ~Matrix() { delete[]p; } }; int main() { int r, c; cout << "请输入矩阵行数和列数:" << endl; cin >> r >> c; Matrix A(r, c); cout << "请输入矩阵A的值:" << endl; A.input(); A.show(); Matrix B(A); cout << "复制构造函数测试:" << endl; B.show(); Matrix C(r, c); C = A + B; cout << "加法运算符测试:" << endl; A.show(); Matrix D(r, c); D = A; cout << "赋值运算符测试:" << endl; D.show(); return 0; }请问这段代码为什么会报错
时间: 2024-01-15 15:03:33 浏览: 68
这段代码报错的原因是在 Matrix 类中的赋值运算符重载函数中没有返回值。应该将赋值运算符重载函数的返回值类型设置为 Matrix 类型,并在函数体中添加 return *this; 语句,将当前对象的引用返回。修改后的代码如下:
```cpp
Matrix& operator=(Matrix& b) {
rows = b.rows;
cols = b.cols;
p = new int[rows * cols];
for (int i = 0; i < rows * cols; i++) {
p[i] = b.p[i];
}
return *this;
}
```
相关问题
定义一个矩阵类Matrix,其数据成员为:"int*p,rows,cols;",用于存放二维数组值。要求将二维数组存放成一维数组,rows和cols表示二维数组的行数和列数,p指向数组第一个元素。要求编写以下几个公有成员丽数。●Matrix(int r,int c):构造函数,初始化数组的行数和列数,并动态为数组申请空间。30习题●Matrix(Matrix&b):拷贝构造丽数。·void input0):输人数组值。·Matrix operator+(Matrix&b):重载加法运算符“+”,实现两个矩阵相加。void operator=(Matrix&b):重载赋值运算符“=”,实现两个矩阵赋值。void show):按二维方式输出a数组。~Matrix0:析构函数,释放数组空间。在主函数中完成对该类的测试。首先输入矩阵的行数和列数的值,然后根据需要构造矩阵类对象,输入矩阵全体元素,完成对上述矩阵类成员#数的测试。例如三个矩阵分别是A、B、C,在完成了A和B矩阵元素的输入或赋值后,计算C=A+B。请自行设计测试流程和测试用例(即测试用数据)。
好的,我明白了你的问题。以下是符合要求的Matrix类的实现:
```cpp
#include<iostream>
using namespace std;
class Matrix{
private:
int* p;
int rows, cols;
public:
Matrix(int r, int c): rows(r), cols(c){
p = new int[rows * cols];
}
Matrix(Matrix& b): rows(b.rows), cols(b.cols){
p = new int[rows * cols];
for(int i = 0; i < rows * cols; i++){
p[i] = b.p[i];
}
}
void input(){
for(int i = 0; i < rows * cols; i++){
cin >> p[i];
}
}
Matrix operator+(Matrix& b){
Matrix c(rows, cols);
for(int i = 0; i < rows * cols; i++){
c.p[i] = p[i] + b.p[i];
}
return c;
}
void operator=(Matrix& b){
if(p) delete[] p;
rows = b.rows;
cols = b.cols;
p = new int[rows * cols];
for(int i = 0; i < rows * cols; i++){
p[i] = b.p[i];
}
}
void show(){
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
cout << p[i * cols + j] << " ";
}
cout << endl;
}
}
~Matrix(){
if(p) delete[] p;
}
};
int main(){
int r, c;
cout << "请输入矩阵的行数和列数:";
cin >> r >> c;
Matrix A(r, c);
cout << "请输入矩阵A的元素:" << endl;
A.input();
Matrix B(A);
cout << "矩阵B是矩阵A的拷贝:" << endl;
B.show();
Matrix C(r, c);
C = A + B;
cout << "矩阵C = A + B:" << endl;
C.show();
return 0;
}
```
测试用例:
输入:2 2 1 2 3 4
输出:
请输入矩阵的行数和列数:2 2
请输入矩阵A的元素:
1 2 3 4
矩阵B是矩阵A的拷贝:
1 2
3 4
矩阵C = A + B:
2 4
6 8
5.定义一个矩阵类Matrix,其数据成员为:“int*p,rows,cols;”,用于存放二维数组值。要求将二维 数组存放成一维数组,rows和cols 表示二维数组的行数和列数,p指向数组第一个元素。要求编写 以下几个公有成员函数 •Matrix(int r,intc):构造函数,初始化数组的行数和列数,并动态为数组申请空间。 • Matrix(Matrix &b):拷贝构造函数。 • void input():输入数组值。 •Matrix operator +(Matrix &b):重载加法运算符“+”,实现两个矩阵相加。e void operator=(Matrix &b):重载赋值运算符“=”,实现两个矩阵赋值。• void showO:按二维方式输出a数组。 ~Matrix():析构函数,释放数组空间 在主函数中完成对该类的测试。首先输入矩阵的行数和列数的值,然后根据需要构造矩阵类对象,输入矩阵全体元素,完成对上述矩阵类成员函数的测试。例如三个矩阵分别是A、B、C,在完成了A和B矩阵元素的输入或赋值后,计算C=A+B。
好的,下面是Matrix类的完整代码:
```
#include <iostream>
using namespace std;
class Matrix {
private:
int* p;
int rows;
int cols;
public:
// 构造函数
Matrix(int r, int c) : rows(r), cols(c) {
p = new int[rows * cols];
}
// 拷贝构造函数
Matrix(Matrix& b) {
rows = b.rows;
cols = b.cols;
p = new int[rows * cols];
for (int i = 0; i < rows * cols; i++) {
p[i] = b.p[i];
}
}
// 输入数组值
void input() {
for (int i = 0; i < rows * cols; i++) {
cin >> p[i];
}
}
// 重载加法运算符
Matrix operator+(Matrix& b) {
Matrix temp(rows, cols);
for (int i = 0; i < rows * cols; i++) {
temp.p[i] = p[i] + b.p[i];
}
return temp;
}
// 重载赋值运算符
void operator=(Matrix& b) {
rows = b.rows;
cols = b.cols;
delete[] p;
p = new int[rows * cols];
for (int i = 0; i < rows * cols; i++) {
p[i] = b.p[i];
}
}
// 按二维方式输出数组
void show() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << p[i * cols + j] << " ";
}
cout << endl;
}
}
// 析构函数
~Matrix() {
delete[] p;
}
};
int main() {
int rows, cols;
cout << "请输入矩阵的行数和列数:" << endl;
cin >> rows >> cols;
Matrix A(rows, cols);
Matrix B(rows, cols);
Matrix C(rows, cols);
Matrix D(rows, cols);
cout << "请输入矩阵A的元素:" << endl;
A.input();
cout << "请输入矩阵B的元素:" << endl;
B.input();
C = A + B;
D = C;
cout << "矩阵A:" << endl;
A.show();
cout << "矩阵B:" << endl;
B.show();
cout << "矩阵C=A+B:" << endl;
C.show();
cout << "矩阵D=C:" << endl;
D.show();
return 0;
}
```
测试结果:
```
请输入矩阵的行数和列数:
2 3
请输入矩阵A的元素:
1 2 3 4 5 6
请输入矩阵B的元素:
7 8 9 10 11 12
矩阵A:
1 2 3
4 5 6
矩阵B:
7 8 9
10 11 12
矩阵C=A+B:
8 10 12
14 16 18
矩阵D=C:
8 10 12
14 16 18
```
阅读全文