Array mit const initialisieren



  • Hallo 🙂
    Ich versuche mich gerade an arrays, genauer gesagt einem zweidimensionalen array.Dieses wird über eine txt initialisiert. Dass klapp auch noch. Jetzt möchte ich manche Zahlen veränderbar haben (alle Nullen) , andere aber nicht.
    Dass muss doch über const funktionieren, oder? Aber wie?
    Wäre toll wenn mir jemand einen Tipp geben könnte 🙂 Schon mal danke 🙂



  • wenns const ist, ist es eben const. 🙄

    aber wenn du die setter-methode auf 0 überprüfen und je nach ausgang der überprüfung einen fehlercode zurück geben lässt, müsste das klappen.



  • Einzelne Elemente in einem Array kann man nicht const machen. Entweder ist das ganze Array const oder eben nicht.



  • sebi707 schrieb:

    Einzelne Elemente in einem Array kann man nicht const machen. Entweder ist das ganze Array const oder eben nicht.

    Würde doch in etwa mit einer struct gehen:

    struct blah
    {
        int value;
        bool is_const;
    };
    

    Wenns eine 0 ist, dann setzt man is_const auf 0.
    Wobei das natürlich total unnötig ist, sehe ich gerade, da kann man auch gleich auf 0 überprüfen.



  • Ich meinte const im Sinne von dem C++ Keyword. Also das der Compiler schon meckert wenn man const Elemente verändern will. Das man sich sowas zur Laufzeit selbst bauen kann is klar.



  • ich bin jetzt nicht so bewandert in c++ aber sind struct und union nicht eigentlich unsinnig, sofern man denn objektorientiert arbeiten will?



  • nö. struct ist ähnlich wie class nur mit default public statt private.
    Und was ist an union unsinnig in C++?



  • ja ich erinnere mich, aber welchen sinn hat es, alles public zu machen, wenn man von außen so wenig zugriffe wie möglich gestatten (geheimnisprinzip) will/soll?

    dann versteh ich halt nicht, was unions in c++ sollen. wenn ich mir sowieso schon den luxus gönne, unmengen (naja) an speicher und rechenleistung für objektorientierung zu verballern, brauche ich doch keine unions einzusetzen, um speicher zu sparen bzw. scheinbar flexibel zu sein, wenn ich das ganze auch objektorientiert (eben über setter-methoden, die mir unter gewissen umständen den zugriff verweigern, oder auch indem ich da einfach eine andere klasse einbaue) handhaben kann.



  • HansKlaus schrieb:

    ja ich erinnere mich, aber welchen sinn hat es, alles public zu machen, wenn man von außen so wenig zugriffe wie möglich gestatten (geheimnisprinzip) will/soll?

    dann versteh ich halt nicht, was unions in c++ sollen. wenn ich mir sowieso schon den luxus gönne, unmengen (naja) an speicher und rechenleistung für objektorientierung zu verballern, brauche ich doch keine unions einzusetzen, um speicher zu sparen bzw. scheinbar flexibel zu sein, wenn ich das ganze auch objektorientiert (eben über setter-methoden, die mir unter gewissen umständen den zugriff verweigern, oder auch indem ich da einfach eine andere klasse einbaue) handhaben kann.

    Der Sinn von einer Struktur ist nicht nur die Abkapselung von Daten, sondern auch um zu zeigen, dass Daten auf logischer Ebene zusammengehören.
    Und wieso wird für Objektorientierung Speicher verballert? Wenn du es nicht Objektorientiert machst, gibt es doch nicht plötzlich weniger Daten.

    Übrigens gefällt mir der Gedanke sowieso nicht, bei jedem noch so kleinen Programm eine Klasse anlegen zu wollen, nur weil OOP so toll ist.
    Das macht es nur unnötig kompliziert.



  • HansKlaus schrieb:

    ja ich erinnere mich, aber welchen sinn hat es, alles public zu machen, wenn man von außen so wenig zugriffe wie möglich gestatten (geheimnisprinzip) will/soll?

    dann versteh ich halt nicht, was unions in c++ sollen. wenn ich mir sowieso schon den luxus gönne, unmengen (naja) an speicher und rechenleistung für objektorientierung zu verballern, brauche ich doch keine unions einzusetzen, um speicher zu sparen bzw. scheinbar flexibel zu sein, wenn ich das ganze auch objektorientiert (eben über setter-methoden, die mir unter gewissen umständen den zugriff verweigern, oder auch indem ich da einfach eine andere klasse einbaue) handhaben kann.

    OOP ist ein Programmierstil, niemand zwingt dich, in C++ objektorientiert zu programmieren. Die Flexibilität, mit der C++ es einem erlaubt, verschiedenste Programmierstile ineinander zu verweben, ist gerade eine der ganz großen Stärken der Sprache; Schlüsselworte wie class haben in C++ nicht nur im Zusammenhang mit OOP Verwendung...

    Abgesehen davon: Wenn du dich tatsächlich der Wahnvorstellung hingibst, dass OOP "Unmengen an Speicher und Rechenleistung verballert", solltest du dir vielleicht mal anschauen, wie die Sprachmittel, an die du da wohl denkst, wenn du das denkst, funktionieren. Natürlich kann man auch in C++ ineffiziente Programme schreiben, das liegt dann aber nicht daran, dass irgendein Schlüsselwort ineffizient ist, sondern daran, dass man einfach schlecht programmiert...



  • naja oop braucht eben einen gewissen Überbau der entsprechend Speicher und rechenzeit beansprucht. Deshalb werden Programme, die schnell sein müssen, auch weiterhin in c geschrieben.

    Ich hab mich hier jedenfalls neulich intensiv darüber aufklären lassen, dass c und c++ zwei völlig verschiedene Dinge sind, und später auch darüber, dass der c-compiler eben darauf optimiert würde, c-code zu übersetzen, der c++-compiler entsprechend c++-code, von daher ist es doch insbesondere im hier vorliegenden Fall unsinnig, solche Sachen zu machen.

    Ob man jetzt für jeden Kleinkram ne Klasse erstellen sollte, bezweifle ich jetzt auch mal, aber oop wurde ja auch entwickelt, um große Projekte übersichtlich zu halten. Wenn man jetzt also nicht gerade für die Uni programmiert, sollte man sowas lieber prozedural lösen und c verwenden. 😃



  • HansKlaus schrieb:

    naja oop braucht eben einen gewissen Überbau der entsprechend Speicher und rechenzeit beansprucht. Deshalb werden Programme, die schnell sein müssen, auch weiterhin in c geschrieben.

    Das ist schlicht und ergreifend falsch.



  • Dann erklär mir doch mal, wieso bspw. Mikroprozessoren bzw. Hardware allgemein mit c (und in einigen spezialfällen mit Assembler) angesteuert werden. Haben die alle das Studium abgebrochen, nachdem sie c gelernt haben und daher keine Ahnung von oop? Was ist mit Linux und WinAPI, c++gabs auch schon, als das alles entwickelt wurde, aber trotzdem hat man aus gutem Grund darauf verzichtet.

    Der einzige Grund überhaupt oop zu verwenden, besteht doch darin, dass der Programmcode Übersicht bleibt.


  • Mod

    Vollkommener Unsinn, sachlich falsch. Auch C wird objektorientiert programmiert.



  • Linus mag c++ nicht, die winapi braucht als programmierschnittstelle ein standardisiertes abi und für viele Mikrocontroller gibts halt kein c++ compiler.



  • HansKlaus schrieb:

    Dann erklär mir doch mal, wieso bspw. Mikroprozessoren bzw. Hardware allgemein mit c (und in einigen spezialfällen mit Assembler) angesteuert werden.

    Sogar das ist falsch.



  • Ich hab genug "Hardwareansteuerungen" geschrieben, das meiste davon in C++. Einen Teil in C#. Nichts in C und nochmal nichts in Assembler.



  • manni66 schrieb:

    HansKlaus schrieb:

    naja oop braucht eben einen gewissen Überbau der entsprechend Speicher und rechenzeit beansprucht. Deshalb werden Programme, die schnell sein müssen, auch weiterhin in c geschrieben.

    Das ist schlicht und ergreifend falsch.

    Ich kann mir vorstellen, dass diese Denke von so Sprachen wie Java kommt, wo jede Klasse von Object erbt, was schonmal etwas Speicher braucht. Genau wie die Geschwindigkeit, die damals in dem streng reinen OOP Java ind en frühen Version auch nicht so sonderlich schnell war.

    Ergo wird schnellg edacht: Java ist langsam und speicherhungrig, es sit rein OOP, also muss OOP daran schuld sein.
    Was ja auch wieder Quatsch ist.

    Ich glaube sogar, viel ist zusätzlich noch darauf zurückzuführen, dass viel C als C++ gelehrt wird, viel C++ mit C und das letztlichlich dazu führt, dass man sich eine Komplexität aufhalst, die man nach Projektende/-versagen auf die Sprache schiebt.



  • HansKlaus schrieb:

    naja oop braucht eben einen gewissen Überbau der entsprechend Speicher und rechenzeit beansprucht.

    Dinge wie Java brauchen einen solchen Überbau, das hat aber nichts mit OOP an sich zu tun. Man kann auch in Assembler objektorientiert programmieren. In C ist OOP längst Standard, vermutlich sogar schon länger als es C++ überhaupt gibt, die von dir genannte WinAPI ist ein gutes Beispiel für eine objektorientierte C API...

    HansKlaus schrieb:

    Deshalb werden Programme, die schnell sein müssen, auch weiterhin in c geschrieben.

    Nope, der einzige rationale Grund, heutzutage noch C zu verwenden, ist, dass es für eine Zielplattform keinen anständigen C++ Compiler gibt.

    HansKlaus schrieb:

    Wenn man jetzt also nicht gerade für die Uni programmiert, sollte man sowas lieber prozedural lösen und c verwenden. 😃

    Man kann auch in C++ prozedural programmieren, sogar viel besser als in C...


  • Mod

    dot schrieb:

    Nope, der einzige rationale Grund, heutzutage noch C zu verwenden, ist, dass es für eine Zielplattform keinen anständigen C++ Compiler gibt.

    👍
    So sieht's aus.
    Alles andere ist nur Ignoranz.


Anmelden zum Antworten