2017-03-31 2 views
-1

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 =.

Output:

Antwort

2

Wenn Sie es nennen wie

Martix a; 
Matrix b = a; 

es immer Copykonstruktor verwendet. Versuchen Sie folgendes:

Matrix a; 
Matrix b: 
b = a; 

Grundsätzlich Matrix a = b; und Matrix a(b); die gleiche Sache ist, weil Sie Konstruktion Matrix a mit Matrix b sind, so dass eine Kopie Konstruktoraufruf verursacht.

+0

Danke, jetzt funktioniert es. Aber ich muss es als Matrix b = a nennen und als Operator nehmen = –

+0

Nun, so funktioniert C++, Sie können es nicht verwenden Zuweisungsoperator, wenn Ihr Objekt noch nicht konstruiert wurde. –

+0

@ Teodor-MarianWolf Sie können nicht. Alles in der Form 'Type name = something' ruft immer den Copy-Konstruktor auf. So funktioniert die Sprache. – NathanOliver

Verwandte Themen