Mal was Code aus dem richtigen Leben.

Hinweise auf besondere Websites, Vorstellung eigener Websites, Internet-Smalltalk
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Mal was Code aus dem richtigen Leben.

Beitrag von Xin » Fr Jan 20, 2012 3:16 pm

Code: Alles auswählen

struct XYZ
{
   /* ... */
    bool nameTransfer( bool set = false, bool to = false )
    {
        static bool doit = true;    // Standard : ja
        if ( set )  doit = to;      // setzen
        return doit;                // Status zurückgeben
    }
   /* ... */
};
Nennt mich Indiana Xin, ich bin Software Archäologe... und ich weine...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Mal was Code aus dem richtigen Leben.

Beitrag von Bebu » Fr Jan 20, 2012 11:09 pm

:shock: Wofür baut man so etwas zusammen? Und wieso heißt es nameTransfer?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Mal was Code aus dem richtigen Leben.

Beitrag von Xin » Fr Jan 20, 2012 11:58 pm

Bebu hat geschrieben::shock: Wofür baut man so etwas zusammen? Und wieso heißt es nameTransfer?
Im Prinzip ist das eine Kombination aus Getter und Setter. Die Variable ist eine Konfigurationsvaraible für die Klasse XYZ. Allerdings eine globale Variable (da static), die für jede Instanz der Klasse verwendet wird. Um die Variable zu setzen, muss man allerdings eine Instanz der Klasse haben, da die Methode nicht static ist.

Ruft man die Funktion ohne Parameter, erhält man den Wert. Ruft man sie mit dem ersten Parameter als true, wird die globale Variable üebrschrieben, entsprechend des zweiten Parameters.
Der Standard gilt nur für die erste Instanz der Klasse, da sie in der nächsten Klasse ja wieder ganz anders sein kann. Gleichzeitig ist der Standard für die erste ('true') nicht der Standard für die Variable "to", denn lässt man to weg, wird auf den Default-Wert 'false' gesetzt.

Wenn man die Variable abfragt, werden zwei Variablen auf den Stack gelegt, eine verglichen. Ein getNameTransfer() würde einfach nur die Variable zurückgeben. Bei setNameTransfer() müsste man nur setzen und nie eine Frage stellen.

Chaotisch, rechenzeitverschwendend und gefährlich, weil alle Instanzen mit einer globalen Variable konfiguriert werden. Wäre hier eine parallele Verarbeitung vorhanden, so würde sich der Wert willkürlich verhalten.

Wofür 'nameTransfer' steht spielt dabei keine Rolle, es ist einfach nur ein boolische Konfigurationsvariable.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten