调用复制构造函数而不是 Operator=
Copy constructor called instead of Operator=
我正在尝试用矩阵做一个简单的练习,我想实现这个操作:矩阵 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=。
Output:
当你这样称呼它时
Martix a;
Matrix b = a;
它总是使用复制构造函数。试试这个:
Matrix a;
Matrix b:
b = a;
基本上,Matrix a = b;
和 Matrix a(b);
是一回事,因为您正在 构造 矩阵 a
使用矩阵 b
,因此会导致复制构造函数调用。
我正在尝试用矩阵做一个简单的练习,我想实现这个操作:矩阵 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=。
Output:
当你这样称呼它时
Martix a;
Matrix b = a;
它总是使用复制构造函数。试试这个:
Matrix a;
Matrix b:
b = a;
基本上,Matrix a = b;
和 Matrix a(b);
是一回事,因为您正在 构造 矩阵 a
使用矩阵 b
,因此会导致复制构造函数调用。