Heim >Backend-Entwicklung >C++ >Warum funktioniert meine Matrix-Klasse?

Warum funktioniert meine Matrix-Klasse?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 08:43:14991Durchsuche

Why Does My Matrix Class's `

Mehrdeutige Überladung von << Operator für ostream

Der Fehler trat beim Versuch auf, den <<-Operator zu überladen. Der Operator für eine Matrix-Klasse ergibt sich aus der Anforderung, dass die Operatorfunktion genau ein Argument annehmen muss. In diesem Fall ist der Fehler wahrscheinlich auf den folgenden Code zurückzuführen:

std::ostream&amp; Matrix::operator <<(std::ostream&amp; stream, const Matrix&amp; matrix) {

    [...]

}

Da der Operator<< Wenn die Funktion als Mitgliedsfunktion der Matrix-Klasse definiert ist, akzeptiert sie implizit das Matrix-Objekt als Argument. Daher benötigt die Funktion tatsächlich zwei Argumente: das ostream-Objekt und das Matrix-Objekt.

Um dieses Problem zu beheben, haben Sie zwei Möglichkeiten:

  1. Verwenden Sie eine Friend-Funktion: Eine Friend-Funktion ist kein Mitglied der Klasse, hat aber Zugriff auf ihre privaten und geschützten Mitglieder. Durch die Definition des Operators << Wenn Sie als Friend-Funktion fungieren, können Sie das implizite Matrix-Objektargument vermeiden.

    friend std::ostream&amp; operator<< (std::ostream&amp; stream, const Matrix&amp; matrix) {
        [...]
    }
  2. Übergeben Sie das Matrix-Objekt als Referenz: Durch Übergabe des Matrix-Objekts als Wenn Sie eine Referenz angeben, können Sie das implizite Matrix-Objektargument vermeiden.

    std::ostream&amp; operator<< (std::ostream&amp; stream, const Matrix&amp; matrix) const {
        [...]
    }

Beachten Sie, dass die zweite Option das erfordert Operator<< Funktion muss als const deklariert werden, da sie das Matrix-Objekt nicht ändert.

Das obige ist der detaillierte Inhalt vonWarum funktioniert meine Matrix-Klasse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn