-1
我正在尝试使用矩阵做一个简单的练习,并且我想实现这个操作:矩阵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];
}
}
}
的问题是,当我尝试使用矩阵d =我的编译器使用拷贝构造函数,而不是我的运算符=。
谢谢,现在它可以工作。 但我不得不称之为矩阵b = a,并以运算符= –
那么,这就是C++的工作原理,当你的对象还没有被构建时,你不能使用赋值运算符。 –
@ Teodor-MarianWolf你不能。任何形式为“Type name = something”的东西都会调用复制构造函数。这就是语言的工作原理。 – NathanOliver