Objekt Member verliert wert im Programm verlauf.



  • Hallo,

    ich habe ein Basisobjekt von den sich zwei Objektableiten. Im Basisobjekt gibt es einen Member der einen Index halten soll.
    Jetzt leite ich von dieser Basisklasse zwei Objekte ab und der Index des ersten Objektes ist 1, der des zweiten ist 2.
    Einzeiger vom Typ des Basisobjektes zeigt auf eines der beiden Objekte.
    Wie kann es sein das Objekt 1 bzw. Objekt 2 die information über den Index verlieren sobald ich irgendwie mit den Objekten arbeite. Zumindest solange Sie Public sind eine Zuweisung oder dergleichen findet nicht statt.
    Sobald ich den Index schütze geht alles so wie es soll.

    Hintergrund:
    Übersetze gerade Quelltexte von Pascal nach C++ und im Original wurde kein Datenschutz verwendet weswegen ich in C++ auf ein ähnliches verhalten gehofft habe.

    Mfg.
    Assaziel



  • Sorry, aber das ist mal so überhaupt nicht verständlich. Zeig doch mal bitte Code...



  • Der Code ist etwas zulang um ihn hier vol und ganz reinzustellen (außerdem Firmencode) also Abstract:

    class  Dad{
    public:
    short idx; 
    
    
     Dad(short r);
     virtual doSomething(){} // tut irgenwas egal jetzt
    };
    
    Dad(short r) {
      idx =r;
    }
    
    class Son:Dad{
    Son(short r):Dad(short r) ;
    };
    Son(short r):Dad(short r) {};
    
    class daughter:Dad{
    daughter(short r):Dad(short r) ;
    };
    daughter(short r):Dad(short r) {};
    
    
    int main(){
    son  A(1);    //idx ==1
    daughter B(2); // idx ==2
    Dad *C; // Zeigt entweder auf  Sohn oder Tochter
    C = &son;
    C->doSomething();  // der Index ist jetzt ändert sich hier und ist nicht mehr 1
    
    }
    
    

    Solange ich oben nicht

    protected:
    short idx;
    

    ändert sich mit jeder Methode der Index wert. Und ich frage mich jetzt warum das der fall ist. Wie gesagt ist eine Protierung und unter normalen umständen würde ich so einen Hirnfuck nicht produzieren ...



  • @assaziel sagte in Objekt Member verliert wert im Programm verlauf.:

    Wie kann es sein

    Du machst was falsch. Kein übersetzbarer Code, keine Hilfe.



  • Nachdem ich die gefühlt 100 Fehler entfernt habe, kommt da 1 bzw. 2 raus, je nachdem auf was C zeigt (als Ausgabe in doSomething).



  • @assaziel sagte in Objekt Member verliert wert im Programm verlauf.:

    // ...
    
    #include <iostream>
    
    class Dad {
    public:
    	short idx;
    	Dad(short r) : idx{ r } {};
    	virtual void doSomething() { std::cout << idx << '\n'; }
    };
    
    class Son : public Dad {
    public:
    	Son(short r) : Dad{ r } {}
    };
    
    class daughter : public Dad {
    public:
    	daughter(short r) : Dad{ r } {};
    };
    
    int main()
    {
    	Son  A{ 1 };
    	daughter B{ 2 };
    	Dad *C;
    	C = &A;
    	C->doSomething(); // gibt sowas von 1 aus.
    }
    


  • Das hört sich für mich eher nach einem Speicherüberschreiber an, d.h. hantierst du noch mit Arrays in der Klasse und schreibst über die Grenzen?



  • @th69 Gute idee ich schaue mal in dem Objekt etwas schlummert.

    edit:
    Danke @th69 das wars ...