C++实验目的: (1)掌握运算符函数重载为成员函数的方法 (2)掌握运算符函数重载为友元函数的方法 (3)掌握不同类型数据间的转换方法 实验内容: 假设square_matrix是n阶整型方阵,请实现下列运算: (1)cin>> square_matrix (2)cout<< square_matrix (3)IntMatrix(n)生成一个n阶单位矩阵 (4)square_matrix+IntMatrix(n) (5)square_matrix_A=square_matrix_B
时间: 2023-06-14 19:05:51 浏览: 108
C++运算符重载 成员函数与友元函数详解
5星 · 资源好评率100%
这是一个很好的 C++ 实验题目,以下是可能的解决方案:
```c++
#include<iostream>
using namespace std;
class IntMatrix{
private:
int **matrix; // 二维数组指针
public:
int n; // 矩阵维数
IntMatrix(int m){ // 构造函数创建单位矩阵
n = m;
matrix = new int*[n];
for(int i=0; i<n; i++){
matrix[i] = new int[n];
for(int j=0; j<n; j++){
matrix[i][j] = (i==j) ? 1 : 0;
}
}
}
IntMatrix & operator=(const IntMatrix & mat){
if(this != &mat){ // 判断是否为同一对象
if(matrix){ // 若原来分配过空间,则释放
for(int i=0; i<n; i++){
delete [] matrix[i];
}
delete [] matrix;
}
n = mat.n;
matrix = new int*[n];
for(int i=0; i<n; i++){
matrix[i] = new int[n];
for(int j=0; j<n; j++){
matrix[i][j] = mat.matrix[i][j];
}
}
}
return *this;
}
friend istream & operator>>(istream & is, IntMatrix & mat){ // 友元函数
for(int i=0; i<mat.n; i++){
for(int j=0; j<mat.n; j++){
is>>mat.matrix[i][j];
}
}
return is;
}
friend ostream & operator<<(ostream & os, const IntMatrix & mat){ // 友元函数
for(int i=0; i<mat.n; i++){
for(int j=0; j<mat.n; j++){
os<<mat.matrix[i][j]<<" ";
}
os<<endl;
}
return os;
}
IntMatrix operator+(const IntMatrix & mat) const{ // 运算符重载为成员函数
IntMatrix result(n);
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
result.matrix[i][j] = matrix[i][j] + mat.matrix[i][j];
}
}
return result;
}
~IntMatrix(){ // 析构函数
for(int i=0; i<n; i++){
delete [] matrix[i];
}
delete [] matrix;
}
};
int main(){
int n;
cout<<"请输入方阵的维数:";
cin>>n;
IntMatrix matrix(n);
cout<<"请输入方阵的元素:"<<endl;
cin>>matrix;
cout<<"输入的方阵为:"<<endl;
cout<<matrix;
IntMatrix unit_matrix = IntMatrix(n);
cout<<"生成的单位矩阵为:"<<endl;
cout<<unit_matrix;
cout<<"方阵加上单位矩阵为:"<<endl;
cout<<(matrix+unit_matrix);
IntMatrix matrix_B(n);
cout<<"请输入另一个方阵的元素:"<<endl;
cin>>matrix_B;
cout<<"两个方阵相等的结果为:"<<endl;
cout<<(matrix=matrix_B);
return 0;
}
```
解决方案的核心是创建了一个 `IntMatrix` 类来表示整型方阵。该类重载了 `=`、`>>`、`<<`、`+` 运算符,使用了运算符重载为成员函数和友元函数的不同方法,以及析构函数进行动态内存管理。在 `main` 函数中,首先输入并输出一个整型方阵,然后生成一个单位矩阵并输出,接着将输入的方阵和单位矩阵相加并输出结果,最后输入并输出另一个方阵,将其赋值给之前输入的方阵并输出结果。
阅读全文