Ergebnis 1 bis 5 von 5

Thema: [C++]Zeiger in Klassen

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #2
    Zur 2ten Frage:
    Manche schreiben pointer so:
    typ *pointer;
    ich schreibe sie so:
    typ* pointer;

    Dann ist für mich klar, dass es vom Typ "typ" ist, und durch den direkten Stern auch ein Pointer. Warum sollte der Stern an dem Namen sein? Der Name ist ja bei Pointer oder Variable gleich, nur der Typ muss gekenntzeichnet werden. Nun zu der Frage. Wenn du einen Pointer erstmalig erstellst, dann muss das mit * sein. Also typ* pointer. Dann hast du einen Pointer der noch auf keinen Bereich zeigt. (Afaik haben frisch deklarierte (undefinierte) Variablen aber immer einen undefinierten Inhalt der alles mögliche sein kann, aber meist nicht 0. Daher ist so ein pointer gefährlich, da er scheinbar eine Adresse beinhaltet, diese aber willkürlich irgendein Zahlenwert ist.) Jedenfalls musst du diesem pointer nun noch einen Wert zuweisen. Das geschieht mit dem Zuweisungsoperator " = ".

    Also pointer = &a;
    Damit wird die Adresse der Variable a in den pointer geschrieben bzw der Pointer zeigt nun darauf. Das gleiche gilt bei dynamischem Speicher mittels new-Operator:
    pointer = new int;
    Der Stern (*) hingegen ist nach der Deklaration auch ein Symbol für den Inhalt des Pointers. Während du also mit pointer = &a; die Adresse des pointers auf a richtest, wird mit *pointer = &a; der Inahalt des Pointers, das, worauf er zeigt, geändert. In diesem Fall ist der neue Wert an der Stelle des Pointers dann die Adresse von a, was natürlich meist keinen Sinn ergibt. Sinnvoller wäre da *pointer = a; damit weißt du dem Inhalt des gepointeten Bereichs den Wert der Variable a zu.
    Im Übrigen machst du das bei getAge() ja schon richtig, du gibst per return den gepointeten Wert zurück und nicht den Pointer selbst, da du ein Stern (*) vorransetzt, der kennzeichnet, dass es um den Inhalt und nicht den Pointer selbst geht.
    Das ist also der Unterschied zwischen * und ohne Stern NACH der Deklaration des Pointers.


    EDIT: Problem 1:
    So kannst du die Methoden auch außerhalb definieren:

    Code:
    #include <iostream>
    
    using namespace std;
    
    class Cat
    {
          public:
                 Cat();
                 ~Cat();
                 void setAge(int age);
                 int getAge( void );
          private:
                  int * itsAge;
    };
    Cat::Cat()
    {
              itsAge = new int(5);
    }
    Cat::~Cat()
    {
               delete itsAge;
    }
    
    void Cat::setAge(int age)
    {
            *itsAge = age;
    }
    
    int Cat::getAge( void )
    {
            return *itsAge;
    }
    
    int main()
    {
        Cat * Momo = new Cat;
        std::cout << "Momo ist ein Katere.\n";
        std::cout << "Er war " << Momo->getAge() << " Jahre alt, als Peter ihn bekommen hat.\n";
        Momo->setAge(9);
        std::cout << "Doch jetzt ist er mittlerweile schon " << Momo->getAge() << " Jahre alt.\n";
        std::cin.get();
        delete Momo;
        return 0;
    }

    Geändert von Ynnus (08.08.2005 um 16:26 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •