Für jede Klasse eine Headerdatei oder mehrere in einer?



  • nichtDeinErnst? schrieb:

    volkard schrieb:

    ...

    #ifndef ...
    #define ...
    
    #include <string>
    
    typedef std::string Postleitzahl;
    
    #endif
    

    🙄

    Ich schließe mich dem an: Nicht dein Ernst, oder?

    Das man eigene Typen auslagert, mag ich noch als sinnvoll erachten, aber den typedef finde ich überflüssig.

    Irgendwann sieht das so aus:

    typedef std::string Text;
    typedef Text Postleitzahl;
    typedef Text Bankverbindung;
    typedef Text Name;
    typedef Name Vorname;
    typedef Name Nachname;
    

    Grausam. 😃



  • ich dachte eher daran, dass
    "In Deutschland sind Postleitzahlen seit dem 1. Juli 1993 5-stellig"
    also nehme ich ein char* und kein std::string! das ist wie mit kanonen auf spatzen zu schießen...



    1. Juli 1993 schrieb:

    ich dachte eher daran, dass
    "In Deutschland sind Postleitzahlen seit dem 1. Juli 1993 5-stellig"
    also nehme ich ein char* und kein std::string! das ist wie mit kanonen auf spatzen zu schießen...

    Genau char[5]. Und 2025 werden sie 6-Stellig? Dann darf ich wie die Opfer-Programmierer damals beim y2k-Problem tausende von Dateien sichten.

    Naja, string ist erstmal ok. Wenn ich dann Zeit und Lust habe, kann ich ja noch ein wenig an der Performanz popeln und char* oder char[] oder uint_32 nehmen. Ich KANN, weil ich es eingeplant habe (*mir mal selber auf die Schulter klopf*).



  • evtl. könnt mans auch mal mit nem int probieren das wären nochmal -20% und natürlich sortiert sich sowas dann auch leichter. aber das wisst ihr ja schon alle dafür habt ihr ja studiert...



  • int0r schrieb:

    evtl. könnt mans auch mal mit nem int probieren das wären nochmal -20% und natürlich sortiert sich sowas dann auch leichter.

    Jaja, dann fügt man bei der Ausgabe noch führende Nullen ein, weil du die in einer Ganzzahl nicht speichern kannst, und dann brauchts nur noch einen, der eine alte Postleitzahl eingibt, wenns kein /^\d{5}$/.match(plz) gibt.



  • int0r schrieb:

    evtl. könnt mans auch mal mit nem int probieren das wären nochmal -20% und natürlich sortiert sich sowas dann auch leichter. aber das wisst ihr ja schon alle dafür habt ihr ja studiert...

    Noch die Ausgabe für meine Freunde in Uhyst fünfstellig machen...
    Mhh. Wie mache ich das bloß? Eine struct draus machen und den op<< überladen?Oder per Hand einfach immer für Fünfstelligkeit sorgen und nie vergessen.



  • volkard schrieb:

    ...Und 2025 werden sie 6-Stellig? Dann darf ich wie die Opfer-Programmierer damals beim y2k-Problem tausende von Dateien sichten...

    eher werden die im jahr 10000 5-stellig und dann wird wieder gesichtet...



  • uups.



  • kurzeInfo schrieb:

    eher werden die jahreszahlen im jahr 10000 5-stellig und dann wird wieder gesichtet...



  • Michael E. schrieb:

    und dann brauchts nur noch einen, der eine alte Postleitzahl eingibt, wenns kein /^\d{5}$/.match(plz) gibt.

    vor ungültigen daten in deinen datensätzen schützt dich auch kein std::string...


  • Mod

    erkennerSchlechtenCodes schrieb:

    Michael E. schrieb:

    und dann brauchts nur noch einen, der eine alte Postleitzahl eingibt, wenns kein /^\d{5}$/.match(plz) gibt.

    vor ungültigen daten in deinen datensätzen schützt dich auch kein std::string...

    Doch! Denn bei std::string man kann erkennen, ob eine 4 oder eine 5 stellige Postleitzahl eingegeben wurde, bei int nicht.

    Postleitzahlen sind nun einmal keine Zahlen, sondern Ziffernfolgen, auch wenn der Name etwas anderes suggeriert. Daher immer den richtigen Datentyp wählen.



  • also ich halt mich jetzt raus mir ist das zu blöd. es ist keine diskussion das in eine eigene datei auszulagern und auch ein eigener datentyp ist dafür ok. aber kein std::string 😡



  • Wie will ich bitte die Postleitzahl 01689 (von Dresden) in einem int ablegen? Das geht überhaupt nicht! Denn dann würde nur die PLZ 1689 übrig bleiben, und das wäre fachlich einfach falsch.

    Ich brauche dafür entweder einen String, oder am besten gleich einen Typ PLZ. Z.B.:

    class Postleitzahl
    {
        std::string plz;
    public:
        Postleitzahl(const string &plz)
        {
           if(plz.size() !=5 )
                throw std::domain_error("Ungültige PLZ.");
           this->plz = plz;
        }
    };
    

    Evtl. könnte man auch plz mit vier Stellen akzeptieren, und dann aber autom. mit der fehlenden Null versehen.

    Und für char*-Fraktion: notfalls kann man auch char* für das interne plz benutzen. Wichtig wäre mir persönlich, das ich die fachliche Struktur kapsele! Und z.B. über einen Output-Operator einfach den String bekommen kann. Aber für die Zukunftssicherheit wäre es dann egal, ob intern ein char* oder string benutzt wird. Der Anwender der Klasse brauch es nicht wissen. Und somit ist die Diskussion für Außenstehende irrelevant.



  • stellt ihr euch nur so blöd oder liegts an mir 😕



  • Artchi schrieb:

    Wie will ich bitte die Postleitzahl 01689 (von Dresden) in einem int ablegen? Das geht überhaupt nicht! Denn dann würde nur die PLZ 1689 übrig bleiben, und das wäre fachlich einfach falsch.

    Du kannst Doch einen int fünfstellig mit führenden Nullen ausgeben.
    Mit "fachlich" ist da nichts zu begründen.

    Ich brauche dafür entweder einen String, oder am besten gleich einen Typ PLZ.

    Finde ich auch. Aber der eigene Typ kann sehr wohl innendrin nur int haben.

    Evtl. könnte man auch plz mit vier Stellen akzeptieren, und dann aber autom. mit der fehlenden Null versehen.

    Das meinen die nicht. Falls jemand noch die alte Postleitzahl 3600 schreibt, ist damit was zwischen 35331 und 35398 gemeint. Deswegen wollen sie fünfstellige Eingaben erzwingen.



  • Artchi schrieb:

    Wie will ich bitte die Postleitzahl 01689 (von Dresden) in einem int ablegen? Das geht überhaupt nicht!

    Hast recht.

    int plz=01689;
    cout<<plz;
    

    wird nicht compiliert. 🤡 🤡 🤡



  • 😃



  • Artchi schrieb:

    Wie will ich bitte die Postleitzahl 01689 (von Dresden) in einem int ablegen? Das geht überhaupt nicht!

    #include <iostream>
    
    void print(unsigned int p);
    
    int main()
    {
    	unsigned int plz = 0x18132;
    
    	print(plz);
    }
    
    void print(unsigned int p)
    {
    	for (unsigned int i = 0; p > 0; ++i)
    	{
    		putchar(p % 10 + '0');
    
    		p /= 10;  
    	}    
    }
    

    Kann ich so nicht stehen lassen. Es handelt sich um ein int. 🤡



  • du kennst aber schon printf()/sprintf() und weißt das das mit führenden nullen bei zahlen keine probleme hat?



  • no_code schrieb:

    du kennst aber schon printf()/sprintf() und weißt das das mit führenden nullen bei zahlen keine probleme hat?

    😕 😕 😕


Anmelden zum Antworten