Ich versuche, eine einfache Übung jetzt mit einer Matrix zu tun, und ich möchte diese Operationen implementieren: Matrix a, Matrix b, Matrix c (a), Matrix d = a, Matrix e = a + b. Für den Moment halte ich es einfach, aber später möchte ich dasselbe machen, aber mit dynamischer Zuweisung und später mit intelligenten Zeigern.Kopieren Konstruktor anstelle von Operator =
Ich erklärte einen expliziten Kopierkonstruktor und ich überladen operator =, ich habe auch einen Destruktor deklariert, also habe ich die Regel von drei.
Hier sind meine Funktionen:
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];
}
}
}
Das Problem ist, dass, wenn ich versuche, Matrix d zu verwenden = a mein Compiler den Copykonstruktor verwenden, nicht meinen Operator =.
Danke, jetzt funktioniert es. Aber ich muss es als Matrix b = a nennen und als Operator nehmen = –
Nun, so funktioniert C++, Sie können es nicht verwenden Zuweisungsoperator, wenn Ihr Objekt noch nicht konstruiert wurde. –
@ Teodor-MarianWolf Sie können nicht. Alles in der Form 'Type name = something' ruft immer den Copy-Konstruktor auf. So funktioniert die Sprache. – NathanOliver