C++ Kurs

Wenn fertig, bitte Fenster schließen

Lösung zur Lektion "friend Funktionen & Klassen"


// Lösung zu friend-Funktionen

// Zuerst Dateien einbinden
#include <iostream>

using std::cout;
using std::endl;

// Konstante für Feldgrössen
const int NOCOL = 3;
const int NOROW = 3;

// Vorwärtsdeklaration der Klasse Vector
// Wird benötigt wegen friend-Deklaration in Matrix!
class Vector;

// Definition der Klasse Matrix
class Matrix
{
    friend void Multi(Matrix&, const Vector&);  // friend-Funktion deklarieren
    short   anMatrix[NOROW][NOCOL];             // Matrix-Daten
  public:
    Matrix();
    void PrintIt() const;
};
// Definition der Memberfunktionen
// Konstruktor, initialisiert Matrix
Matrix::Matrix()
{
    for (short row=0; row<NOCOL; row++)
        for (short col=0; col<NOROW; col++)
            anMatrix[row][col] = row*static_cast<short>(10)+col;
}
// Gibt die Matrixdaten aus
void Matrix::PrintIt() const
{
    for (int row=0; row<NOROW; row++)
    {
        for (int col=0; col<NOCOL; col++)
            cout << anMatrix[row][col] << '\t';
        cout << endl;
    }
}

// Definition der Klasse Vector
class Vector
{
    friend void Multi(Matrix&, const Vector&);   // friend-Funktion deklarieren
    short   anVector[NOROW];                     // Vektor-Daten
  public:
    Vector();
};
// Definition der Memberfunktionen
// Konstruktor, initialisiert Vektor
Vector::Vector()
{
    for (short col=0; col<NOROW; col++)
        anVector[col] = col+2;
}

// Definition der Funktion Multi(...)
// Die Funktion ist friend zu Matrix und Vector und hat damit
// Zugriff auf deren Daten
void Multi(Matrix& TA, const Vector& TV)
{
    for (int row=0; row<NOROW; row++)        // Tabelle mit Vektordaten
        for (int col=0; col<NOCOL; col++)    // multiplizieren
              TA.anMatrix[row][col] *= TV.anVector[row];
}

// main() Funktion
int main()
{
    // Objekte vom Typ Matrix und Vector definieren
    Matrix  myMatrix;
    Vector  myVector;

    // Matrixdaten ausgeben
    cout << "Ausgangsmatrix:\n";
    myMatrix.PrintIt();

    // Multiplizieren der Matrix mit dem Vektor
    Multi(myMatrix, myVector);

    // Matrix erneut ausgeben
    cout << "Nach der Multiplikation:\n";
    myMatrix.PrintIt();
}