newbies und pointer ^^



  • hallo leute!

    ich bin noch einer unter vielen die sich mit pointern etwas schwer tun.

    kommen wir gleich zu meinem problem:

    ich habe mehrere klassen und erzeuge aus diesen objekte. jetzt gibt es ein "zentrales" objekt, in dem mehrere andere objekte etwas ändern müssen: den stack.

    ich habe mit
    stack my_stack;
    einen neues objekt my_stack angelegt.
    nun will ich die adresse an ein anderes objekt weitergeben um mit dem satck weiter zu arbeiten ... nur wie mach ich das genau??

    #include "input.h"
    #include "add.h"
    #include <stack>
    #include <iostream>
    using std::cout;
    using std::endl;
    typedef std::stack<double>stack;

    int main (int argc, char * const argv[])
    {
    // Stack anlegen und Referenz erzeugen
    stack my_stack;
    stack& stackref = my_stack;

    cout << "stackref:"<< &stackref << endl;

    // Input Objekt erzeugen
    input myInput(stackref); // ???? hier liegt das problem
    return 0;
    }

    und die nächste frage wäre dann wie verarbeite ich die übergebene referenz in der klasse input?? wie schaff ich es dass ich dort wieder mit demselben stack weiterarbeiten kann? ist es irgendwie möglich mittels konstruktor zu verarbeiten?

    ich weiß viele fragen und ein großes durcheinander aber bin eben total neu im gebiet von c++ & co 😉

    falls sich jemand die mühe gibt: danke!

    lg,
    kemta



  • Mit Pointern:

    class CInput
    {
    public:
      std::stack* stack;
    
      CInput (std::stack* stack);
    };
    
    CInput::CInput (std::stack* stack)
    : stack(stack)
    {
      // Zugriff mit -> operator
      stack->TuWas();
    }
    
    ...
      std::stack stack;
      CInput input (&stack);
    ...
    

    Mit Referenzen (was ich vorziehe, wenn möglich):

    class CInput
    {
    public:
      std::stack& stack;
    
      CInput (std::stack& stack);
    };
    
    CInput::CInput (std::stack& stack)
    : stack(stack)
    {
      // Zugriff mit . operator
      stack.TuWas();
    }
    
    ...
      std::stack stack;
      CInput input (stack);
    ...
    

    Achtung: Referenzvariablen können nicht mehr geändert werden.



  • [quote]// Stack anlegen und Referenz erzeugen
    stack my_stack;
    stack& stackref = my_stack; [/quote

    Mir ist nicht klar, warum du ein Synonym für my_stack benutzt (stackref).
    Benutze doch direkt my_stack.



  • Neku schrieb:

    Mit Pointern:

    class CInput
    {
    public:
      std::stack* stack;
    
      CInput (std::stack* stack);
    };
    
    CInput::CInput (std::stack* stack)
    : stack(stack)
    {
      // Zugriff mit -> operator
      stack->TuWas();
    }
    
    ...
      std::stack stack;
      CInput input (&stack);
    ...
    

    Mit Referenzen (was ich vorziehe, wenn möglich):

    class CInput
    {
    public:
      std::stack& stack;
    
      CInput (std::stack& stack);
    };
    
    CInput::CInput (std::stack& stack)
    : stack(stack)
    {
      // Zugriff mit . operator
      stack.TuWas();
    }
    
    ...
      std::stack stack;
      CInput input (stack);
    ...
    

    Achtung: Referenzvariablen können nicht mehr geändert werden.

    DANKE!!!

    hat mir sehr weitergeholfen

    lg kemta


Anmelden zum Antworten