Bestmögliche Speicherung von Datensätzen?



  • Maruu schrieb:

    Ich finde es einfach übersichtlicher 2 Klassen zu benutzen

    Widerspricht aber dem ++ in C++, schließlich ist das doch einer der Kernpunkte in C++: Objektorientiertes Programmieren. Was Du da vorhast, klingt eher nach einem Mischmasch zwischen (strukturiertem) C und (objektorientiertem) C++.

    Maruu schrieb:

    ...die Daten erst in ne Tabelle Schreiben soll ist ein bisschen problematisch da es sich um ein Produktivsystem handelt...

    Ich sehe da zwar kein Problem, eine temporäre Tabelle zu erzeugen und anschließend wieder zu löschen...

    Maruu schrieb:

    Nun hab ich noch ne Frage, ich realisiere die Variablen als Verkettete Liste in meinem Objekt. So und mach eine Basisiklasse die nur die Variablen beinhaltet. Außerdem schreib ich vor die Variablen static so das alle Objekte auf die gleichen Variablen zugreifen. Nun Ererbe ich diese Basisiklasse mit meinen 2 Klassen also Daten aus dem HTML Code holen und Daten in DB schreiben. Greifen dann diese Beiden Klassen auch jeweils auf die gleichen Variablen zu??? Weil dann hätte ich kein Problem mit dem Übergeben der Verketteten Listen also den Variablen???

    Das mußt Du mir näher erklären. Versteh ich so nicht.



  • Also das mit der temporären Tabelle ist leider nicht möglich da ich keinne zuätzliche Tabelle erstellen kann, es ist eine feste Tabellenstruktur in der ich nix ändern kann und auch keine Rechte dazu hab.

    So zum anderen Thema ich erkläre es nochmal.

    Ich hab mir gedacht ich erstelle eine Basisklasse die folgende Variablen im geschützten Bereich enthält:

    static char * Name
    static char * Vorname
    static char * Ort
    static char * PLZ
    ...

    So ansonsten enthält die nix, keine Methoden garnix. Nun hab ich 2 weitere Klassen und denen vererbe ich die Basisiklasse so das die 2 weiteren Klassen auch die ganzen Variablen wie oben haben und dann halt noch ihre eigenen Variablen und Methoden.
    Nun ist die Frage, wenn ich vobn jeder der 2 Klassen, die von der Basisklasse geerbt haben, ein Objekt erstelle also z.B.
    Klasse_1 Objekt1;
    Klasse_2 Objekt2;

    greifen die dann intern auf die gleichen Variablen zu, also wenn Objekt1 irgendwas in die Variable Name schreibt, kann das Objekt2 dann auch auslesen???
    Das static vor den Variablen macht ja normalerweiße das alle Objekte auf die gleichen Variablen zugreifen, nur gilt das noch wenn diese vererbt wurden??

    MFG

    Maruu



  • Maruu schrieb:

    Das static vor den Variablen macht ja normalerweiße das alle Objekte auf die gleichen Variablen zugreifen, nur gilt das noch wenn diese vererbt wurden??

    Wenn dem so wäre, könntest Du nur einen einzigen Datensatz definieren und in allen Objekten wären die gleichen Daten enthalten und eine Änderung an einem Objekt würden alle anderen Objekte gleich mit ändern. Wenn ich Dich diesmal richtig verstanden habe.



  • genau so hab ichd as gemeint, dann müsste ich nämlich die Variablen von einem Objekt nicht in das andere Objekt übergeben, nur weiß ich nicht ob das auch noch nach der Vererbung in unterschiedlichen klassen gilt.
    Weisst du das??

    MFG

    Maruu



  • Das "static" bedeutet, das für alle Objekte die Variable die gleiche ist. Das heißt:

    Ich habe eine Klasse Auto. Darin ist eine Variable static int count. Bei jedem Aufruf des Konstruktors wird dieses count jetzt um eines erhöht.

    Wenn ich nun 2 Autos erstelle:

    Auto* auto1 = new Auto();
    Auto* auto2 = new Auto();
    

    und abfrage

    auto1->count;
    auto2->count;
    

    Liefert mir das beide male "2"! Heißt, das static erzeugt eine Klassevariable und keine Objektvariable.

    greifen die dann intern auf die gleichen Variablen zu, also wenn Objekt1 irgendwas in die Variable Name schreibt, kann das Objekt2 dann auch auslesen???

    Sollte eigendlich klappen. Nur mit dem Nachteil, das es egal ist, wieviele Objekte du hast, du kannst immer nur einmal Name, etc. speichern. Es wird ja immer in der Klasse (nicht dem Objekt) gespeichert und die Klasse gibts nur einmal.



  • ja nun ist es aber so das es ja 2 verschiedene Klassen sind. Sozusagen eine Basisklasse Auto mit den Variablen:
    Tempo
    Farbe

    und dann die 2 Klassen LKW und SPORTWAGEN die jeweils die 2 Variablen von Auto erben.

    und wenn ich nun ein Objekt von LKW und eins von SPORTWAGEN erstellen dann sind das ja eigendlich 2 verschiedene Klassen oder beziehen die sich dann auf die Klasse Auto wenns um die Variablen Tempo und Farbe geht??

    MFG

    Maruu



  • Probier's doch einfach aus. Ich weiß es auch nicht. ABER die Verwendung von static widerspricht Deiner Aussage, dass Du alle 'Datensätze' zwischenspeichern willst. Du kannst so nur noch einen Datensatz haben!



  • Ja, laut meinem Verständnis von Vererbung sollte es egal sein, ob du LKW->Farbe oder Auto->Farbe oder Sportwagen->Farbe sagst. Es sollte sich dann immer auf Auto beziehen.

    Aber wie schon so oft gefragt: Was bringt dir das?
    Du kannst jetzt viele viele Autos erstellen, die aber alle die gleiche Farbe haben. Das ist doch unsinn. Du willst doch viele viele Autos mit verschiedener Farbe haben.



  • So jetzt bin ich wieder zurück von der Arbeit.
    Also naja ich hab da ein bisschen rumgedacht aber wahrscheinlich
    ist es nicht
    die beste Lösung. und zwar wollte ich innnerhalb des Objektes eine Verkettete Liste anlegen also z.B. so:
    static int * PLZ
    static int * PLZnext

    usw. anstatt eine Verkettete Liste mit Objekten zu machen die jeweils die ganzen Variablen enthalten. Naja wird wohl besser sein eine Verkettete Liste mit Objekten zu machen anstatt die Verkettete Liste im Objekt anzulegen oder??

    MFG

    Maruu



  • Ein großes fettes JA. 😉

    EDIT: Das heißt unter der Voraussetzung, dass die Datensätze komplett in einer Tabelle landen. Wenn es sich um mehrere Zieltabellen (eigene Tabelle für PLZ/Ort, z.B.) könnte man diese Strukturen 'nachbauen'. Ob sich solch ein Aufwand lohnt sei mal dahingestellt. Normalerweise ist es weniger Aufwand, dies beim Speichern eines Datensatzes zu realisieren.



  • aber mal nur so, wo ist da der Vorteil??
    Weil wenn ich jedes mal ein Objekt neu erstelle um weitere Daten zu speichern dann muss er ja für die ganzen methoden und co auch wieder Speicher reservieren oder??
    Ist das dann ned unnötig Platz verbraucht??

    MFG

    Maruu



  • Nein, Methoden werden nicht 'dupliziert'. Die sind für alle Objekte nur einmal vorhanden. Nur die Datenvariablen werden für jedes Objekt erzeugt. Und wenn Du hier nur Zeiger verwendest, die Du zur Laufzeit mit dynamisch erzeugten Objekten belebst, hast Du den Speicherverbrauch minimiert (wenn auch auf Kosten von etwas Geschwindigkeit). Da es sich bei Deinen Daten um AnsiStrings handelt, würde ich mir allerdings nicht die Mühe machen, diese dynamisch zu erzeugen. Wenn das so viele Datensätze sind, dass Du befürchtest, der Speicher könnte nicht reichen, solltest Du vielleicht doch nach einer Möglichkeit suchen, immer nur einen 'Datensatz' einzulesen und diesen direkt zu speichern.



  • Aha, naja ich befürchte eigendlich nicht das der SPeicher nicht reicht (ist das jetzt ne doppelte Verneinung gewesen*g*), hat mich nur mal so interessiert.
    Dann werd ich wohl ne Verkettete Liste mit Objekten machen. Danke ihr habt mir sehr geholfen.

    Gruß

    Maruu


Anmelden zum Antworten