操作符重载函数的问题
#include <iostream>
using namespace std;
class Matrix
{
public:
Matrix(int nn=0):n(nn) {pp=new int[n*n];}
Matrix(Matrix &mp);
Matrix operator =(Matrix mp);
void Evaluate();
void PrintMatrix();
private:
int *pp,n;//n系方阵的阶数,pp用来指向n*n阶数组
};
void Matrix::Evaluate()//矩阵赋值
{
for(int i=0;i <n;i++)
for(int j=0;j <n;j++)
pp[i*n+j]=i+j;
}
void Matrix::PrintMatrix() //打印矩阵
{
for(int i=0;i <n;i++)
{
for(int j=0;j <n;j++)
cout < < " " < <pp[i*n+j] < < " ";
cout < <endl;
}
}
Matrix::Matrix(Matrix &p) //拷贝构造函数
{
n=p.n;
pp=new int[n*n];
for(int i=0;i <n;i++)
for(int j=0;j <n;j++)
pp[i*n+j]=p.pp[i*n+j];
}
Matrix Matrix::operator =(Matrix mp)//=操作符重载函数
{
Matrix np(mp.n);
for(int i=0;i <mp.n;i++)
for(int j=0;j <mp.n;j++)
np.pp[i*mp.n+j]=mp.pp[i*mp.n+j];
return np;
}
void main()
{
Matrix m(3);//3阶矩阵
m.Evaluate(); //矩阵赋值
m.PrintMatrix(); //打印矩阵
Matrix nn;//生成新的矩阵
nn=m;
nn.PrintMatrix();
}
代码有点长,请大家耐心看看.
我的问题是,在main函数中:
m.PrintMatrix()能够把矩阵打印出来.但nn.PrintMatrix()不输出任何东西
=====
main函数中最后三句改成:
Matrix nn(m);
nn.PrintMatrix();
是可以把nn的矩阵打印出来.
=====
所以我觉得,不是构造函数的问题,应该是操作符重载函数的问题.
不知道我有没有想错了.
[解决办法]
//修改如下:
#include <iostream>
using namespace std;
class Matrix
{
public:
Matrix(int nn=0):n(nn) , pp(NULL)
{if (n> 0) pp=new int[n*n];} // 1. n!=0
Matrix(const Matrix &mp); // 2. 传引用, 提高效率
Matrix& operator =(const Matrix& mp); // 3. 返回引用
void Evaluate();
void PrintMatrix();
private:
int *pp,n;//n系方阵的阶数,pp用来指向n*n阶数组
};
void Matrix::Evaluate()
{
for(int i=0;i <n;i++)
for(int j=0;j <n;j++)
pp[i*n+j]=i+j;
}
void Matrix::PrintMatrix()
{
for(int i=0;i <n;i++)
{
for(int j=0;j <n;j++)
cout < < " " < <pp[i*n+j] < < " ";
cout < <endl;
}
}
Matrix::Matrix(const Matrix &p)
{
n=p.n;
pp=new int[n*n];
for(int i=0;i <n;i++)
for(int j=0;j <n;j++)
pp[i*n+j]=p.pp[i*n+j];
}
Matrix& Matrix::operator =(const Matrix& mp)//=操作符重载函数
{
//Matrix np(mp.n);
if (pp) delete []pp;
pp = new int[mp.n*mp.n];
n = mp.n;
for(int i=0;i <mp.n;i++)
for(int j=0;j <mp.n;j++)
pp[i*mp.n+j]=mp.pp[i*mp.n+j];
return *this;
}
int main()
{
Matrix m(3);//3阶矩阵
m.Evaluate(); //矩阵赋值
m.PrintMatrix(); //打印矩阵
Matrix nn;//生成新的矩阵
nn=m;
nn.PrintMatrix();
}
[解决办法]
晕,慢了.我这也改好了,再下面:
class Matrix
{
public:
Matrix(int nn=0):n(nn) {pp=new int[n*n];}
Matrix(Matrix &mp);
Matrix& operator =(Matrix &mp);
void Evaluate();
void PrintMatrix();
private:
int *pp,n;//n系方阵的阶数,pp用来指向n*n阶数组
};
void Matrix::Evaluate()//矩阵赋值
{
for(int i=0;i <n;i++)
for(int j=0;j <n;j++)
pp[i*n+j]=i+j;
}
void Matrix::PrintMatrix()
{
for(int i=0;i <n;i++)
{
for(int j=0;j <n;j++)
cout < < " " < <pp[i*n+j] < < " ";
cout < <endl;
}
}
Matrix::Matrix(Matrix &p)
{
n=p.n;
pp=new int[n*n];
for(int i=0;i <n;i++)
for(int j=0;j <n;j++)
pp[i*n+j]=p.pp[i*n+j];
}
Matrix& Matrix::operator =(Matrix &mp)//=操作符重载函数
{
if(this==&mp)
return *this;
delete []pp;
n=mp.n;
pp=new int[mp.n*mp.n];
for(int i=0;i <mp.n;i++)
for(int j=0;j <mp.n;j++)
pp[i*mp.n+j]=mp.pp[i*mp.n+j];
return *this;
}
void main()
{
Matrix m(3);//3阶矩阵
m.Evaluate(); //矩阵赋值
m.PrintMatrix(); //打印矩阵
Matrix nn;//生成新的矩阵
nn=m;
nn.PrintMatrix();
}