我正在尝试使用Matrix进行简单的练习,我想实现此操作:矩阵a,矩阵b,矩阵c(a),矩阵d = a,矩阵e = a + b。目前我保持简单,但后来我想做同样的事情,但动态分配,后来智能指针。
我声明了一个显式的复制构造函数,我重载了operator =,我还声明了一个析构函数,所以我有三个规则。
以下是我的功能:
Matrix& Matrix::operator=(const Matrix& opEven)
{
std::cout << "Operator = " << std::endl;
for (int i = 0; i < ORD; i++)
{
for (int j = 0; j < ORD; j++)
{
arr1[i][j] = opEven.arr1[i][j];
}
}
return *this;
}
Matrix::Matrix(const Matrix& obj)
{
std::cout << "Constructing matrix using copy c-tor." << std::endl;
for (int i = 0; i < ORD; i++)
{
for (int j = 0; j < ORD; j++)
{
arr1[i][j] = obj.arr1[i][j];
}
}
}
问题在于,当我尝试使用Matrix d = a时,我的编译器使用复制构造函数,而不是我的operator =。
答案 0 :(得分:2)
当您将其称为
时Martix a;
Matrix b = a;
它总是使用复制构造函数。试试这个:
Matrix a;
Matrix b:
b = a;
基本上,Matrix a = b;
和Matrix a(b);
是相同的,因为您使用矩阵a
构建矩阵b
,因此导致复制构造函数调用。