- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 52

Thema: Char - Array und Pointer

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    Wo Du einfach neue Objekte hinzufügen möchtest, ohne dass das z.B. auf 50 Objekte beschränkt wäre.
    Exakt das habe ich doch gerade beschrieben?! Ein std::list Objekt ist dynamisch, man kann also jederzeit (solange der RAM es hergibt) neue Objekte hinzufügen (bei einem µC würde ich aber eine LinkedList nehmen, keine Ahnung was das Äquivalent in C++ ist)

    Während Schallplatten bestimmte Informationen hergaben, die man in Eigenschaften eintragen könnte, könnte es sein, dass CDs noch eine weitere Eigenschaft haben, die man auch gerne hinzufügen würde, ohne den Programmcode dafür ändern zu müssen.
    Öhm wie wäre es wenn du dann einfach der Schallplatte beibringst dass sie sich selbst erklärt?! Warum müssen die Informationen über die Schallplatte in der "Liste" doppelt gespeichert werden, das ist doch Speicherverschwendung und die Liste interessiert nicht ob das eine Schallplatte aus Gold, Nickel, Paltin oder Uran ist oder nach Einhornpups duftet, solange sie mit der grundlegenden Schallplatte-Klasse kompatibel ist oder?
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  2. #2
    HaWe
    Gast
    @moppi:
    bei deinem Schallplatten-Beispiel änderst du nicht das Objekt selber, sondern fügst nur dynamisch einen neuen Eintrag oder mehrere hinzu. Das ist genau das, was Adressen-Datenbanken machen, wenn du eine neue Person mit einer neuen Anschrift und Tel.-Nr. hinzufügst. Die Anzahl der Einträge ist nach oben offen, wenn du sie dynamisch erzeugst.
    Du fügst dann aber kein neues Objekt (keine neue Klasse, keine neue Instanz) hinzu, für das z.B. auch die Anzahl der PCs und TVs im Haushalt oder die qm der Wohnung eingegeben werden kann.
    Für ganz neue Felder musst du das Objekt von vornherein mit diesem Feld konstruieren und dann neu kompilieren.

    https://www.eu-datenbank.de/datenban...c-datenbanken/

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Für ganz neue Felder musst du das Objekt von vornherein mit diesem Feld konstruieren und dann neu kompilieren.
    Das haben wir weiter oben schon festgestellt, entspricht nicht so unbedingt meiner Vorstellung von Objektorientierung.

    Stell Dir nur vor, Du könntest als Mensch dein Smartphone nicht händeln. Warum? Weil als Du geboren wurdest, das noch nicht existierte und das Gehirn nicht in der Lage ist, sich darauf einzustellen, weil die Struktur, um ein Smartphone zu handeln und Informationen darüber zu speichern, ja noch nicht existieren konnte. Du könntest es zwar sehen, aber nie zuordnen was es ist, bzw. wie man es bedient und was man damit tun kann; Du müsstest erst Nachkommen haben, deren Gehirn dann drauf ausgerichtet / eingestellt ist, weil es sich komplett neu entwickelt, also sozusagen neu kompiliert wird.

    MfG

    - - - Aktualisiert - - -

    Aber: so weit ich gelesen habe, ist OOP dafür gedacht, die Softwareentwicklung zu vereinfachen. Nicht um selbstmodifizierenden Code zu erstellen.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    Deine Vorstellung von selbstmodifizierendem Code ist grundlegend falsch!
    Wenn wir mal dein Beispiel nehmen ist die Programmiersprache (und der daraus generierte Code) deine DNA, welche bestimmt wie diene Zellen konstruiert werden und wie sie sich verhalten.
    Das was uns lernfähig macht ist das Objekt "Neuron" in dem Sinne, welches flexibel konfiguriert werden kann und im Zusammenhang des großen Ganzen erlaubt Informationen auf Programmebene zu verarbeiten.

    Der Kernel in Linux kann sich grundsätzlich (auf Codelevel) nicht selbst umschreiben! Es sind fest geschriebene Programme, welche es erst erlauben dass ein Teil des Speichers modifiziert werden kann und dass du einen Teil des Binärcodes zur Laufzeit austauschen kannst, aber auch erst wenn alle Abhängigkeiten davon freigegeben worden sind oder du braucht einen Neustart.
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #5
    HaWe
    Gast
    entspricht nicht so unbedingt meiner Vorstellung von Objektorientierung.
    Ich schließe mich Ceos an: deine Vorstellung von OOP entspricht nicht den tatsächlichen Gegebenheiten,
    und ob C++ nun deiner Vorstellung entspricht, das mag sein wie es will.
    Aber C++ ist genau wie Delphi zweifelsfrei eine OO-Programmiersprache (ursprünglich: "C mit Objekten" bzw. "Pascal mit Objekten", frag die Enwickler Bjarne Stroustrup und Niklaus Wirth), und wenn du darüberhinaus gehende Möglichkeiten suchst, um zusätzliche Variablen-Bezeichner während der Laufzeit erzeugen zu können, musst du die Programmersprache wechseln, ggf eben Javascript.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Zitat Zitat von Ceos Beitrag anzeigen
    Der Kernel in Linux kann sich grundsätzlich (auf Codelevel) nicht selbst umschreiben! Es sind fest geschriebene Programme, welche es erst erlauben dass ein Teil des Speichers modifiziert werden kann und dass du einen Teil des Binärcodes zur Laufzeit austauschen kannst, aber auch erst wenn alle Abhängigkeiten davon freigegeben worden sind oder du braucht einen Neustart.
    Jeder Code der durch eine CPU interpretiert wird und also eine Aktion bewirkt, kann sich grundsätzlich selbst umschreiben. Jedenfalls ist das seit den 8086 so. Dafür existieren alle notwendigen Maschinenbefehle. Ob er das zur Laufzeit darf, liegt daran, welche Privilegien ein Software-Entwickler vorgesehen hat; anders gesagt: welche Möglichkeiten er durch Privilegierungsmaßnahmen verbietet. Falls es Maschinencode für eine bestimmte CPU gibt, der das nicht kann, dann bitte mal hier, bei der Gelegenheit die CPU und Hersteller nennen!

    Nachtrag
    ----------
    Was durchaus richtig ist, das ein Teil eines Maschinenprogramms, der sich gerade in der Abarbeitung befindet, sich nicht selbst verändern darf ("kann"). Es muss erst zu einem anderen Bereich im Programm gewechselt werden, wo die Veränderung stattfindet, um dann zurückzukehren.

    MfG
    Geändert von Moppi (29.10.2019 um 10:48 Uhr)

  7. #7
    HaWe
    Gast
    Jeder Code der durch eine CPU interpretiert wird...
    per C++ und einem C++-Compiler erzeugter Code wird nicht interpretiert. Er wird in den Speicher eines Prozessors geladen, alloziert einen gewissen Speicher für Code und statische Variablen im Stack und für dynamische Variablen auf dem Heap und hat eine feste Einsprungadresse. Variablendeklarationen (d.h.: ihre Speicheradressen, mehr ist es ja nicht) liegen im stack und können zur Laufzeit nicht verändert und auch keine weiteren hinzugefügt werden.
    Aber letztlich sind deine Vorstellungen ein Streit um des Kaisers Bart und es hat auch nichts mit OOP an sich zu tun.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Ein Maschinencode, meinetwegen 0C oder EA, ist nur ein Datum. Mehr nicht. Der Code selber tut gar nichts, solang der nicht von der CPU geladen und zur Verarbeitung der ggf. dem Datum nachfolgenden Daten oder bereits geladener Daten herangezogen wird.



    MfG

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    das ist so nicht richtig Moppi, du hast einen Programmcounter, welcher dem Prozessor sagt wo die nächste Instruktion steht, die Instruktionen entscheiden dann darüber wohin der Programmcounter wandert und was sonst noch so im Prozessor passiert.

    Die Instruktionen stehen bei einem µC meistens in einem Flashspeicher oder im RAM, bei einem PC ausschließlich im "Speicher" (gesamtheit aus Cache, RAM und was da sonst noch an Magie drin steckt für mehr Speed)

    Du kannst also nur dann ein Programm sich selbst modifizieren lassen, wenn du ihm beibringst wie es den Speicher modifiziert.

    Jetzt kommen wir mal aus Maschinencode zurück zur Programmiersprache, in einer Programmiersprache hast du Regeln für Syntax und Grammatik die ein Compiler (nicht NUR Compiler, auch Linker etc., eh hier einer Spitzfindig wird) dann zu Maschinencode macht.

    Wenn ich also "Code" selbst umschreiben lassen möchte, muss es in den Regeln der Sprache und der enthaltenen Unterprogramme eine entsprechend Entwickelte Routine geben die es dir erlaubt Zugriff auf den Speicher mit dem gespeicherten Maschinencode zu nehmen und diesen zu ändern.

    C++ ist eine Sprache die üblicherweise von einem Compiler zu Maschinencode übersetzt wird, während bei Java z.B. vorher Bytecode generiert wird der dann wie JavaScript interpretiert wird.

    Ich kann den Bytecode im RAM verändern und damit sein Verhalten nachdem er neu interpretiert worden ist, genau so wie cih den JS im Speicher ändern kann bevor daraus vom Interpreter der veränderte Maschinencode gemacht wird.

    Du vermischst hier Hochsprachen und Maschinencode.


    Das was du möchstest erreichst du nur wenn du ein sich selbst modifizierendes Programm IN einer Programmierrsprache deiner Wahl schreibst.

    Es ist von der Srpache und der bereitgestellten Librarys/Unterprogrammen abhängig in wie weit du das im Rahmen der Programmiersprache selbst schon erschlagen kannst, aber C++ kann jedenfalls nicht seine Klassen zur Laufzeit umschreiben.

    Gönn dir mal ein Buch zu Rechnerarchitektur und Compilern
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

Ähnliche Themen

  1. Pointer auf Struct von Byte-Array
    Von Bumbum im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 31.05.2013, 16:01
  2. Char mit array verbinden ?
    Von AsuroPhilip im Forum Software, Algorithmen und KI
    Antworten: 22
    Letzter Beitrag: 08.09.2011, 13:37
  3. gelöst : Frage zu C und 2 Dim char Array
    Von jar im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 29.05.2007, 16:53
  4. zweidemensionales char-array
    Von p_mork im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 15.03.2007, 16:54
  5. Cstring einem char array zuweisen
    Von ceekay im Forum Software, Algorithmen und KI
    Antworten: 8
    Letzter Beitrag: 17.04.2006, 10:20

Berechtigungen

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

Labornetzteil AliExpress