面试题答案
一键面试#include <iostream>
#include <iomanip>
class Matrix {
private:
int** data;
int rows;
int cols;
public:
Matrix(int r = 0, int c = 0) : rows(r), cols(c) {
if (rows > 0 && cols > 0) {
data = new int* [rows];
for (int i = 0; i < rows; ++i) {
data[i] = new int[cols];
}
} else {
data = nullptr;
}
}
~Matrix() {
if (data != nullptr) {
for (int i = 0; i < rows; ++i) {
delete[] data[i];
}
delete[] data;
}
}
// 重载>>运算符
friend std::istream& operator>>(std::istream& is, Matrix& matrix) {
is >> matrix.rows >> matrix.cols;
if (matrix.data != nullptr) {
for (int i = 0; i < matrix.rows; ++i) {
delete[] matrix.data[i];
}
delete[] matrix.data;
}
matrix.data = new int* [matrix.rows];
for (int i = 0; i < matrix.rows; ++i) {
matrix.data[i] = new int[matrix.cols];
for (int j = 0; j < matrix.cols; ++j) {
is >> matrix.data[i][j];
}
}
return is;
}
// 重载<<运算符
friend std::ostream& operator<<(std::ostream& os, const Matrix& matrix) {
for (int i = 0; i < matrix.rows; ++i) {
for (int j = 0; j < matrix.cols; ++j) {
os << std::setw(4) << matrix.data[i][j];
}
os << std::endl;
}
return os;
}
};
你可以这样测试这个类:
int main() {
Matrix m;
std::cout << "请输入矩阵(格式为先行数再列数,然后是矩阵元素按行输入): ";
std::cin >> m;
std::cout << "输出矩阵: \n" << m;
return 0;
}