Frage zu struct und Memberinitialisierung



  • Hallo zusammen, ich habe in einem Buch folgenden Codeschnipsel gesehen, kann aber nicht ganz nachvollziehen was da passiert, hier ist er:

    const int not_a_reading = –7777;
    const int not_a_month = –1;
    
    struct Day {
       vector<double> hour {vector<double>(24,not_a_reading)}; // long winded
       // vector<double> hour(24,not_a_reading); // better
    };
    
    struct Month { // a month of temperature readings
       int month {not_a_month}; // [0:11] January is 0
       vector<Day> day {32}; // [1:31] one vector of readings per day
    };
    
    struct Year { // a year of temperature readings, organized by month
       int year; // positive == A.D.
       vector<Month> month {12}; // [0:11] January is 0
    };
    
    

    Was bedeutet das:

    vector<Day> day {32};
    32 elemente von day?

    vector<Month> month {12};
    12 elemente von month?



  • Ja - aber schau demnächst einfach in die Referenz: std::vector::vector.

    PS: Der Code wird hier mit Markdown dargestellt (z.B. benutze den </>-Button dafür).



  • Struct brauchst Du bei C++ gar nicht mehr, mach doch bitte ne class draus. Nehme an, daß du wie ich mit C pur angefangen hast. Und verwende die Code- Tags zwecks der Lesbarkeit, bitte.



  • @Sarkast: Das ist Unsinn. Wenn sowieso nur public-Member enthalten sind, dann kann es auch explizit mittels struct kenntlich gemacht werden.



  • @Th69 Naja, wenn eine struct ehern so dasteht, mag das sein, aber wenn sich Änderungsbedürfnisse ergeben, ist ne class handhabungsfreundlicher.
    Und genau genommen passiert gar nix, außer daß structs/classes dem Compiler bekannt gemacht werden. Und es ist "sicko", sowas wie "day" als "double" anzulegen. Schreib mal weiter, wenn sich was tut oder auch nicht, komm wieder.



  • So habe jetzt die Codetags angewendet. Die struct verwende ich nur, weil die Member public sind und es nur Daten sind (ne class wäre etwas "überdimensioniert"?)
    Danke für den Verweis auf die cpp-Reference. Dann habe ich den Codeschnipsel jetzt soweit verstanden.



  • @zipehpa das ändert die Antwort nicht wesentlich. Du bist rein deklarativ unterwegs. Eigentlich tut der Code nichts, als den Compiler ein paar Millisekunden zu beschäftigen. Th69 hat den Schubser geliefert, und liefere doch bitte ein paar Zeilen prozeduralen Code.



  • @Sarkast sagte in Frage zu struct und Memberinitialisierung:

    @Th69 Naja, wenn eine struct ehern so dasteht, mag das sein, aber wenn sich Änderungsbedürfnisse ergeben, ist ne class handhabungsfreundlicher.

    Wieso sollte eine class handhabungsfreundlicher sein? Der einzige Unterschied zwischen struct und class ist das default public bei struct versus default private bei class. Sonst sind die beiden gleich.


Log in to reply