关于C++拷贝构造函数的问题?

来源:百度知道 编辑:UC知道 时间:2024/09/22 09:26:24
#include <iostream.h>
class matrix
{
private:
int row;
int column;
int **data;
public:
matrix();
matrix(const matrix&);
~matrix();
void set_matrix(int,int);
void show_matrix();
friend matrix &operator +(matrix&,matrix&);
friend matrix operator -(matrix&,matrix&);
friend matrix operator *(matrix&,matrix&);
};
matrix::matrix()
{
row=0;
column=0;
data=new int *[row];
for(int i=0;i<row;i++)
data[i]=new int [column];
}
matrix::matrix(const matrix& m)
{
row=m.row;
column=m.column;
data=new int *[row];
for(int i=0;i<row;i++)
data[i]=new int [column];
for(i=0;i<row;i++)
for(int j=0;j<column;j++)
data[i][j]=m.data[i][j];
}
matrix::~matrix()
{
for(int i=0;i<row;i++)
delete []data[i];
delete []data;
}
void matrix::set_matrix(int r,int c)

你没有重载运算符=
c=a+b;按位拷贝

+ -这些算符不是那样被重载的

补充:
matrix c = a+b;
这样是copy构造
matrix c;
c = a+b;
这样是默认赋值,按位copy,是错误的

再说一次 你的c= a+b ;不会调用copy构造函数
而且c = a + b;之后 c与a 共用内存。

你说的问题好像不是程序错误,在我的vc里运行正常啊。不知道你想实现什么功能。

int **data;
貌似错了,int *data;

你的程序用g++编译运行是没有问题