kramann.info
© Guido Kramann

Login: Passwort:










6 Zeiger und Arrays bei Objekten

  • Eine wesentlich größere Flexibilität in der Programmierung erreicht man durch die Verwendung von Zeigern und Arrays.
  • Auch bei Objekten ist es möglich, Zeiger auf sie verweisen zu lassen, oder Arrays von ihnen anzulegen.

Vorbetrachtungen

Call by Value bei der Übergabe von Objekten an Funktionen

  • Wenn Sie die Implementierung in Kapitel 3.9 genau anschauen, fällt Ihnen vielleicht folgendes auf:
  • Die Methode addRechteck(Rechteck r) sieht so aus, als würde es sich um ein "call by value" handeln.
  • Wenn Sie das mit entsprechendem Code überprüfen, werden Sie feststellen, dass das auch stimmt.
  • Testen Sie folgendes Programm:
#include<iostream>

using namespace std;

class Zahl
{
    public:
        int x;
    Zahl(int xx)
    {
        x = xx;
    }
};

class Zahlverwalter
{
  public:
    void zeigeX(Zahl z)
    {
        z.x++;
        cout<<z.x<<endl;
    }   
};

int main(void)
{
    Zahl z1(1),z2(2);
    Zahlverwalter v;

    v.zeigeX(z1);
    v.zeigeX(z2);

    cout<<z1.x<<endl;            
    cout<<z2.x<<endl;            
} 

Code 6-1: Call by value

2
3
1
2
 

Code 6-1b: Konsolenausgabe

  • Sie werden an der Ausgabe bemerken, dass die Inkrementierung nicht für z1 und z2 erfolgt ist, sondern nur für deren Kopien innerhalb der Funktion void zeigeX(Zahl z).
#include<iostream>

using namespace std;

class Zahl
{
    public:
        int x;
    Zahl(int xx)
    {
        x = xx;
    }
};

class Zahlverwalter
{
  public:
    void zeigeX(Zahl* z)
    {
        z->x++;
        cout<<z->x<<endl;
    }   
};

int main(void)
{
    Zahl z1(1),z2(2);
    Zahlverwalter v;

    v.zeigeX(&z1);
    v.zeigeX(&z2);

    cout<<z1.x<<endl;
    cout<<z2.x<<endl;
            
} 

Code 6-2: Call by reference (Zeigerübergabe)

2
3
2
3
 

Code 6-2b: Konsolenausgabe

Call by reference mit Hilfe von Zeigern

  • Bei der Übergabe von Zeiger auf Objekte an eine Funktion, können Sie die Objekte in der Funktion manipulieren.
  • Genau das ist Gegenstand der heutigen Vorlesung.

Referenzen als getarnte Zeiger

  • Es gibt noch eine dritte Möglichkeit in C++: die Verwendung so genannter Referenzen.
  • Referenz-Übergaben sehen aus wie Call by Value - Aufrufe, verhalten sich aber wie Zeiger.
  • In dieser Vorlesung werden wir Referenzen NICHT behandeln.
  • Trotzdem hier ein Programmbeispiel:
#include<iostream>

using namespace std;

class Zahl
{
    public:
        int x;
    Zahl(int xx)
    {
        x = xx;
    }
};

class Zahlverwalter
{
  public:
    void zeigeX(Zahl& z)
    {
        z.x++;
        cout<<z.x<<endl;
    }   
};

int main(void)
{
    Zahl z1(1),z2(2);
    Zahlverwalter v;

    v.zeigeX(z1);
    v.zeigeX(z2);
            
    cout<<z1.x<<endl;            
    cout<<z2.x<<endl;    
} 

Code 6-3: Call by reference (Referenzübergabe)

2
3
2
3
 

Code 6-3b: Konsolenausgabe