C++ Union - Verständnisproblem



  • prinzipiell sind die strukturen die man in c selbst hätte schreiben müssen in c++ schon vorhanden, sodass man nicht die systematik an sich neu schreiben muss, sondern sofort klassen und objekte anlegen kann. stimmt das so?



  • moment

    strukturen (also structs) sind erstmal nur daten die zusammengefasst und quasi zu einem neuen datentyp gebunden sind

    der unterschied zu klassen ist, dass klassen operationen enthalten können, die auf genaudiese zusammengefassten datenanwendbar sind ohne dass jeder die daten sehen bzw. verändern kann (kapselung)

    wenn du in C dir ein struct für 3D Vektoren geschrieben hast, heisst das aber noch lange nicht dass es das gleiche für C++ schon gibt (ok, 3d vektoren werden bei 3d spielen gebraucht, also gibts das schon)



  • ich meinte nicht structs sondern einfach prinzipiell funktionen die den umgang mit strukturen steuern.



  • jetzt weis ich gar nicht mehr was du meinst

    C ist hier im C++ veraltet 😉
    und funktionen die als parameter oder rückgabe werte structs haben kannst du dir auch selbst definieren, das hat mit dem standard erstmal nix zu tun

    in C++ gibt es einen standard, also die standard template library, den die compiler hersteller mehr oder weniger erfüllen (oder sogar mehr noch implementieren). in diesem standard sind klassen zu hauf vorhanden. vielleicht auch irgendwo noch structs (mir fallen spontan keine ein ausser in den alten c headern)
    genauso sind auch eine reihe von fuktionen definiert, die sind auch mehr oder weniger alle genormt (iteratoren, funktoren usw......)

    "Strukturen" wie unions, structs oder class's sind elemente der programmiersprache. diese (sinnvoll) anzuwenden ist aufgabe eines programmierers

    du kannst sowohl in c als auch in c++ dir eine datei erstellen und gleich sofort ohne probleme folgendes reinschreiben

    struct s{
       int myInt;
       float myFloat;
    };
    
    void f(int & a, const s * const struktur)
    {
         a = struktur->myInt;
    }
    
    int main()
    {
        int foo = 148274;
        s Struk = {42, 3.1415965};
        f(a, &Struk);
    }
    

    (nicht getestet, und ich kann nur C++, für c kann ich keine garantien übernehmen)

    das hat nichts mit dem unterschied der sprachen zu tun und auch nix mit dem standard



  • ein direktes problem habe ich nicht mehr = ) ich habe mich nur gefragt, wie es zu c++ kam, da hab ich mir gedacht,dass es wohl nichts anderes ist, als c mit ein paar effizienten funktionen die bestimmte routinen erfüllen, sodass man auf diese sehr effizienten routinen aufbauen kann, ohne die basis neu zu entwickeln, das heißt, dass man ein gewisses maß an effizienz dadurch geschenkt bekommt.

    Was ich wissen wollte/will ist, ob ich richtig liege mit dieser Sicht auf die Programmiersprache C++.

    Gruß,
    Flo



  • Da liegst du sowas von falsch. C++ ist weit fortschrittlicher als C, C++ hat Templates, Klassen, Exceptions, eine Standardlibrary und noch viel mehr.
    In C++ programmiert man ganz anders als in C. Ein gutes Beispiel hierfür ist die Verarbeitung von strings.



  • aber der ganze umgang mit den verschiedenen dingen wie z.b. strings, ist doch eben, durch sehr effiziente funktionen geregelt, die man genausogut hätte in C schreiben und benutzen kann. Die essentiellen dinge kann man ja mit c, wie man sie effizient verpackt ist sache der programmierer... ich glaube nicht, dass ich mit meiner annahme so komplett falsch liege.
    vielleicht muss man wissen, in welcher sprache c++ geschrieben wurde.

    ich könnte mir gut vorstellen, dass aus c mit den entsprechenden libraries fast schon c++ wird.

    natürlich kann man die implementierten begriffe nicht verändern, aber mal ganz abgesehen von den begrifflichkeiten...

    edit: das hier(http://en.wikipedia.org/wiki/C%2B%2B_Standard_Library) belegt doch was ich sage.



  • Nein, das kann man nicht in C schreiben. In C gibt es keine Klassen.

    Was meinst du mit "In welcher Sprache C++ geschrieben wurde"? C++ ist eine kompilierte Sprache, die wird direkt zu Maschinencode verarbeitet.

    Nein, mit C Libraries hast du nur kotzigen C Code in C++, mehr nicht.

    Zum Edit: Nein, da steht nur, dass sie die C Standardlibrary enthält.



  • Flub schrieb:

    aber der ganze umgang mit den verschiedenen dingen wie z.b. strings, ist doch eben, durch sehr effiziente funktionen geregelt, die man genausogut hätte in C schreiben und benutzen kann. Die essentiellen dinge kann man ja mit c

    Nein. Du hast in C keine Klassen, keine Templates und kein RAII. Das sind essentielle Sprachfeatures, die zur Implementierung von std::string verwendet werden.

    Flub schrieb:

    ich glaube nicht, dass ich mit meiner annahme so komplett falsch liege.

    Doch, tust du. C und C++ sind verschiedene Sprachen mit verschiedenen Konzepten und Paradigmen. C++ ist nicht nur sowas wie eine Erweiterung, es ändert die Programmierweise fundamental.



  • okay.
    Wie kann man sich die entwicklung der sprache dann vorstellen?
    also entwickeln, die eigentlich den compiler oder wie kann ich mir das vorstellen?



  • Nein, die Entwickeln den ISO C++ Standard. Die Compiler werden von Compilerbauern gemacht. (Nicht zu verwechseln mit Gemüsebauern o.ä.)

    Btw, weil ich gerade Langeweile habe, etwas, von dem du mir zeigen kannst, wie man es in C löst. 😃
    http://ideone.com/bvouF
    Ich vergaß, in C gibt es ja keine Funktionen in structs.



  • 314159265358979 schrieb:

    Btw, weil ich gerade Langeweile habe, etwas, von dem du mir zeigen kannst, wie man es in C löst. 😃
    http://ideone.com/bvouF
    Ich vergaß, in C gibt es ja keine Funktionen in structs.

    Das ist keine faire Anfrage, scheint mir. Da werden in C++ Probleme gelöst, die man ohne C++ nicht hätte. Wenn Du was vergleichen willst, dann gib den Zweck des ganzen Programms an.

    Oder um es zu parodieren:

    Btw, weil ich gerade Langeweile habe, etwas, von dem du mir zeigen kannst, wie man es in C löst. 😃

    void killCurrentThreadAndUnwindStackAndDestuctAllLocalObjectsCloseFilesAndSoOn()
    {
      return throw sizeof 0e0;
    }
    


  • Flub schrieb:

    okay.
    Wie kann man sich die entwicklung der sprache dann vorstellen?
    also entwickeln, die eigentlich den compiler oder wie kann ich mir das vorstellen?

    also es war einmal eine programmiersprache. sie wurde C genannt. C war sehr sehr leistungsfähig. die meisten menschen konnten C nicht lesen.

    anfang der 80er jahre kam ein prinz, prinz bjarne von stroustrop, der sagte sich: " C ist ja gut und schön aber, das konzept der objekt orientierung wie bei smalltalk finde ich sehr toll. ich glaube ich schreibe mir das für C"
    und so entwickelte er eine neue programmiersprache die auf C basierte...

    heute ist es halt so geregelt, dass sich ein standardisierungskommitee zusammensetzt und entscheidet was für c++ sinnvoll wäre und wie gewisse sachen einfaach geregelt sein sollen.
    dann kommen firmen an und nehmen dieses blatt mit den ganzen vorgaben als grundlage für ihren eigenen compiler den sie nun entwickeln
    dann entwickeln sie quasi einen compiler der diese standardisierte sprache versteht, jedoch hat jeder compiler hersteller so seine eigenheiten was abwärtskompatiblität, syntax usw. angeht, sprich komplett einheitlich sind die ganzen c++ compiler nicht (sieht man ja am kommenden standard wiedermal, lambda expressions zum Beispiel werden von manchen schon unterstützt von adneren noch nicht)
    aber im grossen und ganzen sind das kleinere unterschiede die zwar beachtenswert sind aber nicht gravierend

    ...und in ein paar jahren (wenn er [hoffendlich] nicht gestorben ist) trifft sich prinz bjarne wieder mit seinen freunden und entscheidet über den übernächsten C++ standard.



  • volkard schrieb:

    Das ist keine faire Anfrage, scheint mir. Da werden in C++ Probleme gelöst, die man ohne C++ nicht hätte. Wenn Du was vergleichen willst, dann gib den Zweck des ganzen Programms an.

    Da hast du Recht, ist mir jedoch erst bewusst geworden, nachdem ich den Post verfasst habe.

    volkard schrieb:

    void killCurrentThreadAndUnwindStackAndDestuctAllLocalObjectsCloseFilesAndSoOn()
    {
      return throw sizeof 0e0;
    }
    

    Und das kompiliert?



  • Skym0sh0 schrieb:

    Flub schrieb:

    okay.
    Wie kann man sich die entwicklung der sprache dann vorstellen?
    also entwickeln, die eigentlich den compiler oder wie kann ich mir das vorstellen?

    also es war einmal eine programmiersprache. sie wurde C genannt. C war sehr sehr leistungsfähig. die meisten menschen konnten C nicht lesen.

    anfang der 80er jahre kam ein prinz, prinz bjarne von stroustrop, der sagte sich: " C ist ja gut und schön aber, das konzept der objekt orientierung wie bei smalltalk finde ich sehr toll. ich glaube ich schreibe mir das für C"
    und so entwickelte er eine neue programmiersprache die auf C basierte...

    heute ist es halt so geregelt, dass sich ein standardisierungskommitee zusammensetzt und entscheidet was für c++ sinnvoll wäre und wie gewisse sachen einfaach geregelt sein sollen.
    dann kommen firmen an und nehmen dieses blatt mit den ganzen vorgaben als grundlage für ihren eigenen compiler den sie nun entwickeln
    dann entwickeln sie quasi einen compiler der diese standardisierte sprache versteht, jedoch hat jeder compiler hersteller so seine eigenheiten was abwärtskompatiblität, syntax usw. angeht, sprich komplett einheitlich sind die ganzen c++ compiler nicht (sieht man ja am kommenden standard wiedermal, lambda expressions zum Beispiel werden von manchen schon unterstützt von adneren noch nicht)
    aber im grossen und ganzen sind das kleinere unterschiede die zwar beachtenswert sind aber nicht gravierend

    ...und in ein paar jahren (wenn er [hoffendlich] nicht gestorben ist) trifft sich prinz bjarne wieder mit seinen freunden und entscheidet über den übernächsten C++ standard.

    also besteht das entwickeln, doch aus dem compilerbau oder was?
    was hat denn der bjarne jetzt direkt gemacht, wenn man sicn vorstellt wie er in seinem zimmer sitzt und c++ entwickelt, was (konkret) war das ergebnis an dem er arbeitete?

    Was ist daran schlimm, wenn der Thread etwas ausufert? man wird nicht gezwungen sich damit zu beschäftigen und es wäre auch nicht besser, wenn ich zu jeder frage einen thread aufmache. Ist das problem, dass man sich nicht aufgeräumt nach dem Motto Threads im C-plusplusforum abgearbeitet, fühlen kann?
    in welchen forumsbereich passt denn das was gerade in dem thread hier passiert?

    es ist eigentlich auch kein großes ding, dass sind nur kommunikationsprobleme, man redet aneinander vorbei. ich will konkretes, wissen dass mir verständlich macht, was gemacht werden muss beim entwickeln von soner sprache. mich interessiert wie alles auf einander aufbaut.

    also, wie kommt man von einer normalen analogen schaltung auf einer lochrasterplatine zu einem relaiscomputer wie hat man darauf aufgebaut bis man irgendwann nicht mehr das gefühl hatte man legt einen schalter um und ändert so den zustand im system sodass die richtigen ergebnisbits (z.b. durch LED s sichtbar) leuchten, sondern eingaben machen kann.

    ich will wissen, wie das genau funktioniert, also als Beispiel:

    Ich frage :
    Wie kann man sich die entwicklung der sprache dann vorstellen?

    Skym0sh0 antwortet :
    und so entwickelte er eine neue programmiersprache die auf C basierte...
    (danach kommt dann, das sie doch an einem Compiler, der dem neuen standard arbeiten, was ja zuvor von der langen Zahl als falsch hingestellt wurde.
    Die anderen Antworten konfrontieren sich auch nicht wirklich mit der Frage.

    also, weiß denn jemand so genau, dass er wüsste was er machen müsste um eine neue programmiersprache zu entwickeln?

    seid bitte nicht allzu genervt von mir 😉 aber irgendwie muss ich ja hinterher sein das zu erfahren was mich interessiert.



  • Du überlegst dir, wie eine schöne Sprache deiner Meinung nach aussieht, schreibst eine EBNF-Grammatik, und gibst sie einem Compiler/Interpreter-bauer bzw schreibts dir selbst einen.

    Was in einem einzigen Satz so einfach klingt, ist in Wirklichkeit ziemlich komplex.
    Es gibt mittlerweile schon so viele Programmiersprachen für die verschiedensten Zwecke,
    dass kaum noch der Bedarf an neuen Sprachen besteht.



  • Es gibt mittlerweile schon so viele Programmiersprachen für die verschiedensten Zwecke,
    dass kaum noch der Bedarf an neuen Sprachen besteht.

    Außer natürlich an meiner!



  • danke lange Zahl, mehr wollte ich nicht wissen, ich habe nicht vor eine sprache zu entwickeln = )



  • C ist hier im C++ veraltet

    C ist alles, aber sicher nicht veraltet.
    und C hat auch ne Bedeutung im C++ Bereich. Ohne die C-Kompatiblitaet waere C++ nie an der Stelle wo es jetzt ist, oder ?

    also, weiß denn jemand so genau, dass er wüsste was er machen müsste um eine neue programmiersprache zu entwickeln?

    Naja, er kennt die Aspekte, auf die es Ihm ankommt, und vielleicht vorgaben die er bekommt. Dann laesst er sich Konzepte einfallen und macht Kompromisse, irgendwann kommt dann was gescheites bei raus, oder auch ned 🙂

    fuer C++:
    C existierte und war bei AT&T in dem Umfeld wo Stroustrup beschaeftigt war, sicher intensiv im Einsatz.
    In C kann man auch "Object-Orientiert" programmieren, nur sieht das ned besonders schoen aus. Man muss die (rudimentaere) typsicherheit überlisten und oft sehr maechtige, aber sehr kompliziert ausschauende Techniken verwenden (Funktionspointer, CallBacks).
    Fazit, trotz "Objectorientierung" seitens der Programmierer, entsand nicht wirklich besser wartbarer Code.
    Fuer groessere Projecte mit mehreren Programmierern und wechselnden Programmierern weniger förderlich.

    Denk das war der Grund fuer das entstehen von C++.
    Wie gesagt die Vorgaben waren:
    - binaere Kompatiblitaet zu C (das gilt auch für viele andere Sprechen)
    - weitgehende Code - Kompatiblitaet zu C (ja c++ war wirklich als Erweiterung zu C konzipiert)
    - ObjectOrientierung als sprachliches Mittel

    Die aenderungen vom compiler her sind eigentlich gar ned so krass.
    Der Sprachwortschatz von c++, der zu C hinzukommt ist minimal, sind nur ne handvoll wörter.
    Wirkliche anederungen sind eigentlich nur die virtuellen Methoden an den Klassen (vtable) ansonsten ist vieles nur Symbolnamenspielerei und verstecken von parametern ... beim compiler.
    Mehr Grips steckt eher im Praeprozessor, Stichwort Templates.

    Nur haben eben diese Anederungen nen radikales umdenken im Design mit sich gebracht.
    also der Unterschied von C zu C++ ist eher Designtechnischer und Philosophischer Art, als Sprachlicher.

    Ciao ...



  • Decimad schrieb:

    Es gibt mittlerweile schon so viele Programmiersprachen für die verschiedensten Zwecke,
    dass kaum noch der Bedarf an neuen Sprachen besteht.

    Außer natürlich an meiner!

    😃 n1 *word*

    wie programmiersprachen entwickelt werden:
    es gibt verschiedenste konzept und anwendungsgebiete für programmiersprachen (markup languages wie HTML oder latex, scriptsprachen wie lua oder batch, und programmiersprachen wie java oder c/c++, und dazwischen natürlich viele mischungen). diese konzepte nennt man paradigmen (sng paradigma). die sind unabhängig von irgendwelcher hardware, sprich die haben sich auch schon früher leute überlegt (turing hat ja ein schachprogramm geschreiben ohne computer xD), aber natürlich kann man heute immer noch neue erschaffen. und darauf aufbauend designst du deine sprache (was muss rein, was muss sie können, keywords, usw...).
    dann kommt der "praktische" teil, du erstellst grammatiken wie die sprache auszusehen hat. das klingt recht einfach ists aber nicht wie einer meiner vorredner gesagt hat (versuch mal regeln anzugeben wie die deutsche grammatik ist: subjekt -> prädikat -> objekt reicht bei weitem nicht). aber das ist ein anwendungsgebiet der theoretischen informatik, die auch direkt ansätze hat um das einfacher zu gestalten bzw erstmal zu kontrollieren (wie ich persönlich finde ist das auch sehr spannend).

    so nun hast du deine konzepte und deine sprache auf dem papier. nun müsstes du einen compiler bauen der die sprache versteht und die umwandelt in eine sprache die dein pc versteht (assembler oder sowas)...

    so nun zur hardware:
    ein computer ist dumm (ja sehr dumm). der kann nichts ausser addieren. die subtraktion ist schon ein interpretationstrick des addierens (zweierkomplement) und für die multiplikation greifen schon erste mikroprogramme.

    aber wie klappt das?
    du hast etwas speicher den du mit beliebigen 010101 füllst.
    du hast dein steuerwerk dass eine gewisse folge von 0 und 1 als addition deutet (dort werden dann deine gespeicherten 101010101 z.b. in die ALU geschoben irgendwo per und gatter z.b.) und eine andere folge von 1 und 0 als multiplikation

    du hast also 3 eingaben
    zahl1 zahl2
    \ /
    | plus eine squenz von bits zum steuern
    |
    ergebnis

    da gibts lustige CPU simulatoren, wobei das in der grössen ordnung für menschen kaum noch überschaubar ist

    der knackpunkt ist einfach nur, du steuerst mit ein paar eingaben deine cpu (wie weichen im schienen netz die reiserichtung steuern)
    und das mit einer saumässig hohen geschwindigkeit (strom geschwindigkeit ~ lichtgeshwindigkeit, bzw knapp drunter)


Anmelden zum Antworten