namespace



  • C++ Learner schrieb:

    Ich denke int muss nicht zwingend in der Definition von Funktionen als Rückgabewert angegeben werden ? Wenn da nix davor steht ist das doch automatisch int 😕

    Das war mal vor Jahren in C. In C++ muss immer ein Rückgabewert angegeben werden. Mit welchem Buch/Tutorial lernst du?



  • pumuckl schrieb:

    C++ Learner schrieb:

    Ich denke int muss nicht zwingend in der Definition von Funktionen als Rückgabewert angegeben werden ? Wenn da nix davor steht ist das doch automatisch int 😕

    Das war mal vor Jahren in C. In C++ muss immer ein Rückgabewert angegeben werden. Mit welchem Buch/Tutorial lernst du?

    Hm, da hab ich mir gar keine Gedanken drüber gemacht weil der Compiler (BDS 2006) überhaupt nicht gemeckert hat (Warnungen 0). Dann werde ich das mal abändern.

    Ist denn die Vorgehensweise mit den Variablen so in Ordnung ?



  • Ich kann mir kaum vorstellen, das so etwas wirklich nützlich ist.

    Ich denke auch das es vom Programmablauf schneller ist als wie wenn man die Variablen bei jedem Aufruf als Parameter den Funktionen übergibt, oder ?

    Das ist aber bestimmt ein falscher Grund auf jegliche Objekte zu verzichten.

    Bei deinem Beispiel würde sich eine Klasse eher anbieten. Und bevor ich das direkt in den namespace packen würde, würde ich soagar ein singleton bevorzugen.



  • drakon schrieb:

    Ich kann mir kaum vorstellen, das so etwas wirklich nützlich ist.

    Ich würde das ja gerne verstehen wollen, aber was meinst du damit genau 😕

    drakon schrieb:

    Bei deinem Beispiel würde sich eine Klasse eher anbieten. Und bevor ich das direkt in den namespace packen würde, würde ich soagar ein singleton bevorzugen.

    Was ich habe ist eine Funktionssammlung, aber ich brauche nicht mehrere Objekte. Von daher ist eine Klasse bestimmt etwas überdimensioniert ?!


  • Administrator

    C++ Learner schrieb:

    Was ich habe ist eine Funktionssammlung, aber ich brauche nicht mehrere Objekte. Von daher ist eine Klasse bestimmt etwas überdimensioniert ?!

    Wie drakon sagt, wäre da ein Singleton angebracht:
    http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)

    Das praktische daran ist, dass du damit die Variablen verstecken kannst. Die gehen ja auch niemanden was an.

    In Boost.Serialization gibt es übrigens eine Hilfsklasse für Singletons:
    http://www.boost.org/doc/libs/1_39_0/libs/serialization/doc/singleton.html

    Grüssli



  • Vielleicht ist ja dein Beispiel einfach nur ungeschickt gewählt, aber das macht so einfach keinen Sinn.
    Du hast Daten und Funktionen, die darauf operieren. Das ist genau das Anwendungsgebiet von Klassen..

    Freie Funktionen sind gut, aber sie sollte dann wirklich unabhängig sein und nicht noch ein paar Variablen von sonst wo her brauchen. Da machst du dann lieber ein Singleton oder z.B eine Klasse mit statischen Funktionen/Variablen. Dann weiss man sofort, was zusammen gehört.



  • Hi,

    danke für eure Hilfe. Ich werde mir das mit dem Singleton mal anschauen, aber kann mir auch jemand zu meinem Verständnis erklären warum das Beispiel von mir nicht ok ist ? Die Variablen sind im namespace ja auch gekapselt, oder worin liegt das Problem ?



  • Nein, gekapselt ist das nicht. Was hindert mich, als Benutzer der Funktionen da einfach das hier zu machen:

    MyNamespace::Result = 666; //evil
    

    ?

    Der Sinn von Klassen und privaten Member ist es (unter anderem) die Variablen von unerlaubten Zugriffen zu schützen und nur eine spezifizierte Schnittstelle zu bieten. Damit hat man immer die Kontrolle über alle Variablen, was man bei deinem Ansatz nicht hätte. Wenn man z.b plötzlich will, dass Result nur noch Werte von 0-5 zurückgeben kann, dann müsste man jegliches vorkommen in jeder Zeile von jedem Benutzer des namespaces kontrollieren und das ist böse. Bei einer Klasse, wo der Zurgriff über einen getter geregelt ist reicht genau eine Stelle. (nämlich im getter selbst).

    EDIT:
    Mist, habe die Variablen auch im Header gesehen.. -.-


  • Administrator

    C++ Learner schrieb:

    Die Variablen sind im namespace ja auch gekapselt, ...

    Oh, hab gedacht, dass du sie in den Header getan hattest. Habe ich nicht richtig hingesehen.

    C++ Learner schrieb:

    ... oder worin liegt das Problem?

    Es gibt noch weitere Probleme 🙂
    Das praktische an einem Singleton ist, dass du einen Konstruktor hast. In diesem Konstruktor kannst du deine Variablen initialisieren. Sobald das erste Mal das Singleton verwendet wird, sind die Variablen initialisiert, sofern du einen sinnvollen Konstruktor geschrieben hast 😉

    In deinem Code ist das nicht der Fall, wodurch leicht Fehler entstehen können, wenn jemand vergisst, die Variablen über eine Funktion zu intialisieren.
    Nicht zu vergessen ist auch, dass fundamentale Typen, wie zum Beispiel ein int , nicht automatisch mit 0 initialisiert sind, wenn sie konstruiert werden.

    Über den Destruktor eines Singletons kannst du, falls dies nötig ist, am Ende des Programmes Ressourcen wieder freigeben.

    Grüssli



  • Danke für die Erklärungen. Da muss ich noch einiges nachholen. In meinen C++ Büchern habe ich nichts über Singleton gefunden, scheint wohl nichts für Anfänger zu sein 🤡
    Würde dann auch der namespace überflüssig sein ?



  • Du kannst das Singleton auch in einem namespace definieren. Das ist kein Problem.



  • ich weiß net genau ob das hier in den thread gehört, aber ich brauche dringends hilfe.

    unzwar suche ein buch, skript, oder was anderes, was mir die arbeit erleichtert unter bds 2006 (turbo c++) zu programmieren. explizit brauche ich das für GUI den ich komme zum teil gar nicht mehr weiter und die ganzen fragen hier reinzuschreiben würde den ganzen tag dauern.

    MFG cyclops



  • greenhorn777 schrieb:

    ich weiß net genau ob das hier in den thread gehört...

    Definitiv nicht. Wenn du schon so unsicher bist, warum hast du keinen eigenen Thread aufgemacht?

    Abgesehen davon ist das hier das Standard-C++-Forum. Wir kennen keine GUI und auch kein Turbo-C++... 😉


Anmelden zum Antworten