class vs. struct



  • Hallo zusammen,
    ich will mir wieder einmal Meinungen einiger Leute einholen 😉

    Ich wollte euch fragen, wann ihr eine class benutzt und wann eine struct . Es geht hierbei nicht nur um die Zugriffsspezifizierer, sondern auch um die Komplexität.

    Grundsätzlich mache ich die meisten Klassen als class . Sobald spezifische Methoden etc. vorhanden sind, zieh ich das dann durch, d.h. Member privat, mit Getter- und Setterfunktionen. Eine struct brauch ich eher als Speicherung mehrerer Werte, sie hat also nicht wirklich eine Aufgabe.

    So weit, so gut. PODs im Sinne von C mache ich praktisch nie, weil es einfach nicht komfortabel ist. Zu den struct s gehört für mich meistens ein Konstruktor dazu. Nun gibt es natürlich einige Grenzfälle, bei denen ich mir nicht sicher bin, was besser ist.

    Ein Beispiel dafür wäre eine Klasse für einen mathematischen (hier zweidimensionalen) Vektor. Eigentlich sollte dieser ja nur zwei Werte speichern.

    struct Vector2
    {
        int x;
        int y;
    
        Vector2();
        Vector2(int NewX, int NewY);
    };
    

    Doch so einfach ist er nun auch wieder nicht. Da kommen alle Operatoren dazu (globale und in der Klasse), Funktionen zum Umgang mit dem Vektor und eventuell sogar noch Funktoren für assoziative Container.

    Würdet ihr unäre Funktionen wie Length() oder UnitVector() (Verkürzung zur Länge 1) schon auch global machen und nicht als Memberfunktion?

    Aber class finde ich auch nicht das Wahre, weil man für einen Mathe-Vektor nicht unbedingt Getter und Setter braucht. Wobei ich schon eher zu class als struct tendiere, vor allem wenn man den Vektor später noch ausbauen will...

    Wie handhabt ihr das grundsätzlich? Ab welcher Komplexität nehmt ihr eher eine class ?



  • Nexus schrieb:

    Ich wollte euch fragen, wann ihr eine class benutzt und wann eine struct . Es geht hierbei nicht nur um die Zugriffsspezifizierer, sondern auch um die Komplexität.

    Ich verwende struct eigentlich immer bei trivialen Klassen die einer C-Struktur vom Aufbau ähnlich sind (Wenn gleich ich auch Konstruktoren verwende). Oder für Traitklassen und andere Teilaspekte für Templateklassen.



  • Ich verwende nur class.
    Ich hab mir das irgendwann mal so begründet:
    - ich schreibe C++
    -> das neue keyword ist class, struct ist nur für rückwärtskompatibilität
    - Ich brauche die Kompatibilität hier nicht, da ich an anderen Stellen auchdie kompatibilität zu C breche (Templates, Casts, ...)
    - ob der default public oder private ist, ist egal,
    da ich den spezifier immer dazu schreibe

    => Unterm stricht seh ich kurz gesagt einfach keinen grund für struct,
    PODs sind auch über arrays oder eben ne class machbar ...
    (Union hab ich ausser für spielereien euch noch nei wirklich benutzt btw.)

    greets,
    branleb



  • Ich nutze struct für Funktoren, Metafunktionen und einige Hilfstemplates. Für den Rest class.



  • LordJaxom schrieb:

    Ich nutze struct für Funktoren, Metafunktionen und einige Hilfstemplates. Für den Rest class.

    dito. Funktoren, Traits, Policies und das ganze Geraffel mit Templatemetafunktionen kommt bei mir in structs, genauso wie Datenbündel.



  • Hallo,

    ich handhabe das sehr pragmatisch. struct verwende ich immer dann, wenn ich nur einen Datenbehälter benötige, dazu kommen höchstens noch Konstruktoren. Sobald ich Memberfunktionen habe, oder Daten private sein sollen, dann wird eine Klasse eingesetzt. Oder kürzer gesagt: ich verwende struct nur im Sinne der C-Syntax, bis auf die Ausnahme eventuell vorhandener Konstruktoren.

    MfG,

    Probe-Nutzer



  • So in etwa, wie bei den meisten Vorrednern. Außerdem definiere ich noch reine Interfaces in structs.



  • Ok, dann habe ich so ziemlich die gleiche Vorstellung wie euch (abgesehen von branleb). Danke für die Meinungen.

    In diesem Falle werde ich für den Vektor sehrwahrscheinlich class nehmen mit Gettern und Settern.


Anmelden zum Antworten