Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » [Problem] Abgeleitete Klasse

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.04.2004, 05:05 Uhr
DerSchwarzeSchlumpf



Hi

So es is jetzt etwas kompliziert zu erklären aber ich hoffe ich bekomm das jetzt um die zeit noch einigermaßen hin *g*

Ich habe eine Basisklasse und leite von diesen 2 weitere Klassen ab (den Code poste ich etwas weiter unten). Das Problem ist: Anscheinend legt er mir nur ein einzelnes Objekt für beide Klasse an.
Ich habe folgendes getestet:
-> Wenn ich in den beiden abgeleiteten Klassen jeweils individuell eine Variable mit dem gleichen Namen anlege und denen 2 verschiedene Werte zuweise, funktioniert es problemlos (nur würde das meiner Meinung nach den Sinn einer "Basis-Klasse" ja ad surdum führen ,oder?)
-> Wenn ich jedoch einen int in der "Basis-Klasse" definiere, und dann in den abgeleiteten Klassen darauf zugreife, so überschreiben diese diesen Wert.
Entweder ich habe da bei der "Ableitung" einiges nicht verstanden so dass man keine variablen in der Basisklasse definieren kann und diese dann automatisch jeweils individuell in die abgeleiteten Klassen angelegt werden und jede unabhängige werte annehmen kann... . *g*

der code der "basis-klasse":


C++:
class Point
{
  public:
    
    Point();
    ~Point();

    void setPointDefine(unsigned row_counter, unsigned column_counter);
    void setPointChange(unsigned row_counter, unsigned column_counter);
    void setPointCounterToNull() {point_counter_ = 0;}
    void setPointSetFalse() {point_set_ = false;}
    bool getPointSet() {return point_set_;}
    unsigned getPointRow() {return row_;}
    unsigned getPointColumn() {return column_;}
    unsigned getPointCounter() {return point_counter_;}
    void countPoint() {point_counter_++;}

  private:
    static unsigned point_counter_;
    static unsigned row_;
    static unsigned column_;
    static bool point_set_;
};



und eine abgeleitete Klasse (sind beide 1:1 gleich, nur die eine trägt den Namen "StartPoint", die andere den Namen "FinishPoint").


C++:
class StartPoint : public Point
{
  public:

    ~StartPoint();
    static StartPoint* getInstance();

  protected:
    static StartPoint* instance_;

  private:
    StartPoint();
};

//----------------------------------
StartPoint* StartPoint::getInstance()
{
  if(instance_ == NULL)
    instance_ = new StartPoint();

  return(instance_);
}



laut meinem verständnis müsste damit ja ein Objekt vom Typ "StartPoint" angelegt werden und dieser Pointer wird mir geliefert, StartPoint ist ein von "FinishPoint" komplett unabhängiges Objekt und auch die Variablen (point_counter_;row_; column_, point_set_) müssten verfügbar sein und unabhängig belegt werden können.

lieg ich hier komplett falsch oder hat jemand eine idee warum das nicht funktioniert?

btw: wenn das so nicht möglich ist, was wäre dann möglich? *g* *derzeit total auf der leitung steh*

danke jedenfalls schon einmal für die hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.04.2004, 09:00 Uhr
virtual
Sexiest Bit alive
(Operator)


WEnn Du direkten Zugriff auf die Attribute in der Basisklasse brauchst, so müssen sie protected und nicht private sein.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.04.2004, 12:06 Uhr
ao

(Operator)



Zitat:
DerSchwarzeSchlumpf postete
und auch die Variablen (point_counter_;row_; column_, point_set_) müssten verfügbar sein und unabhängig belegt werden können.

Die Variablen sind "static" deklariert und gehören damit allen Instanzen der Klasse (bzw. ihrer Ableitungen) gemeinsam.

Bei Dingen wie point_counter (Anzahl der vorhandenen Instanzen) macht das auch Sinn, allerdings sind dann Methoden wie SetPointCounterToNull unsinnig, und der Point-Counter sollte im Konstruktor hoch- und im Destruktor wieder heruntergezählt werden.

Die Variablen row_ und column_ scheinen mir eher Instanz-Eigenschaften als Klassen-Eigenschaften zu sein. Die sollten nicht "static" sein, damit jede Instanz von Point (oder von StartPoint) ihre eigene row und ihre eigene column hat.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.04.2004, 12:19 Uhr
DerSchwarzeSchlumpf




Zitat:
ao postete
[quote]DerSchwarzeSchlumpf postete
und auch die Variablen (point_counter_;row_; column_, point_set_) müssten verfügbar sein und unabhängig belegt werden können.

Die Variablen sind "static" deklariert und gehören damit allen Instanzen der Klasse (bzw. ihrer Ableitungen) gemeinsam.

Bei Dingen wie point_counter (Anzahl der vorhandenen Instanzen) macht das auch Sinn, allerdings sind dann Methoden wie SetPointCounterToNull unsinnig, und der Point-Counter sollte im Konstruktor hoch- und im Destruktor wieder heruntergezählt werden.

Die Variablen row_ und column_ scheinen mir eher Instanz-Eigenschaften als Klassen-Eigenschaften zu sein. Die sollten nicht "static" sein, damit jede Instanz von Point (oder von StartPoint) ihre eigene row und ihre eigene column hat.[/quote]

haaaaaaaaaaaaaallo

danke echt super es liegt an dem "static" *freu* jetzt weiß ich auch wenigstens was das "static" da in diesem zusammenhang bewirkt *g* *hab mir darunter auch eigentlich was anderes vorgestellt*

nene der point_counter_ is auch instanzenabhängig der zählt nur individuell mit wieviele Start-/Zielpunkte bei der Eingabe eines Labyrinths definiert werden weil das Labyrinth erst nach der kompletten Eingabe auf Gültigkeit überprüft werden soll. Wenn der point_counter_ im FinishPoint-Objekt oder im StartPoint-Objekt größer als 1 ist wird das ganze Labyrinth dann für ungültig erklärt und der Counter auf null gesetzt

daaaaaaaanke nochmal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: