Frage bezüglich Code Design



  • Wenn du keine Vererbung/Operator-Überladung und praktisch nur eine Kapselung nutzen willst, reicht struct.
    Auch sind signifikantere Namen als deine für ein class/struct sinnvoll.



  • Wutz schrieb:

    Wenn du keine Vererbung/Operator-Überladung und praktisch nur eine Kapselung nutzen willst, reicht struct.

    Was hat denn das mit class <-> struct zu tun?



  • _matze schrieb:

    Der einzige Unterschied: struct-Member sind per default public, class-Member sind private.

    Das ist nicht der einzige Unterschied.

    Ich benutze immer struct , weil öffentliche Vererbung viel häufiger ist als private und weil öffentliche Member an den Anfang der Klassendefinition gehören. Für die, die schwer von Begriff sind: Das spart pro Klasse eine Zeile ( public: ) und ein weiteres public vor den Vaterklassen.

    Beides im selben Projekt zu verwenden ist Quatsch, weil man dann bei jeder Vorwärtsdeklaration einer Klasse nachsehen muss, ob sie als struct oder class definiert wird.

    Und jetzt heult mich damit voll, dass class für den Leser ja so viel verständlicher und OOP-mäßiger ist, weil es man das in Java und C# auch so schreibt. Oder weil struct in C weniger kann als in C++.



  • TyRoXx schrieb:

    Das spart pro Klasse eine Zeile ( public: ) und ein weiteres public vor den Vaterklassen.

    Ich lach mich tot. Du machst prinzipielle Designentscheidungen abhängig von der "Einsparung" einer Codezeile bzw. sogar eines Wortes.
    Naja, wer nicht will, der hat schon.



  • Caligulaminus schrieb:

    Was hat denn das mit class <-> struct zu tun?

    Weil eine (Klassen)Hierarchie ohne access level und nur mit default-public sinnfrei ist, s.o.



  • Wutz schrieb:

    TyRoXx schrieb:

    Das spart pro Klasse eine Zeile ( public: ) und ein weiteres public vor den Vaterklassen.

    Ich lach mich tot. Du machst prinzipielle Designentscheidungen abhängig von der "Einsparung" einer Codezeile bzw. sogar eines Wortes.
    Naja, wer nicht will, der hat schon.

    WTF?

    Wutz schrieb:

    Caligulaminus schrieb:

    Was hat denn das mit class <-> struct zu tun?

    Weil eine (Klassen)Hierarchie ohne access level und nur mit default-public sinnfrei ist, s.o.

    OK, du hast einfach keine Ahnung. Lern bitte die Klassensyntax von C++ und komm dann wieder.



  • Wutz schrieb:

    Weil eine (Klassen)Hierarchie ohne access level und nur mit default-public sinnfrei ist, s.o.

    ???



  • TyRoXx schrieb:

    _matze schrieb:

    Der einzige Unterschied: struct-Member sind per default public, class-Member sind private.

    Das ist nicht der einzige Unterschied.

    Ich benutze immer struct , weil öffentliche Vererbung viel häufiger ist als private und weil öffentliche Member an den Anfang der Klassendefinition gehören. Für die, die schwer von Begriff sind: Das spart pro Klasse eine Zeile ( public: ) und ein weiteres public vor den Vaterklassen.

    Kannst du gerne so machen. Hab' ich aber bisher kaum gesehen. Wo public/private Member zu stehen haben ist auch Ansichtssache. Wobei ich hier deine Ansicht teile -- ich schreibe hier halt das "unnötige" public .

    Beides im selben Projekt zu verwenden ist Quatsch, weil man dann bei jeder Vorwärtsdeklaration einer Klasse nachsehen muss, ob sie als struct oder class definiert wird.

    Unfug. Der Standard erlaubt explizit dass class/struct bei Fwd. Decl. und Definition nicht zusammenstimmen muss. Gibt auch keinen Grund dafür dass es zusammenpassen müsste.
    Davon abgesehen halte ich Fwd. Decl. Headers für eine sehr gute Idee, dann hat man genau ein Header File wo man die Fwd. Decl. schreiben muss. Da bekommt man es schon gebacken dass das mit der Definition zusammenstimmt.

    Und jetzt heult mich damit voll, dass class für den Leser ja so viel verständlicher und OOP-mäßiger ist, weil es man das in Java und C# auch so schreibt. Oder weil struct in C weniger kann als in C++.

    Du mich auch. Viel Spass noch mit deiner "ich weiss alles besser" Mentalität.



  • hustbaer schrieb:

    Beides im selben Projekt zu verwenden ist Quatsch, weil man dann bei jeder Vorwärtsdeklaration einer Klasse nachsehen muss, ob sie als struct oder class definiert wird.

    Unfug. Der Standard erlaubt explizit dass class/struct bei Fwd. Decl. und Definition nicht zusammenstimmen muss. Gibt auch keinen Grund dafür dass es zusammenpassen müsste.

    Bei einer Klassendefinition ist class vs. struct total wichtig und bei der Deklaration nicht? Wenn man mit den beiden Schlüsselwörtern irgendeinen Unterschied ausdrücken möchte, ist Konsistenz unabdingbar.

    hustbaer schrieb:

    Und jetzt heult mich damit voll, dass class für den Leser ja so viel verständlicher und OOP-mäßiger ist, weil es man das in Java und C# auch so schreibt. Oder weil struct in C weniger kann als in C++.

    Du mich auch. Viel Spass noch mit deiner "ich weiss alles besser" Mentalität.

    Bleib sachlich.



  • struct Foo;
    class Foo{};
    int main()
    {
       Foo bar;
    }
    

    ohne Probleme Möglich!

    struct {
    ist in C++ übrigens das exakt gleiche wie
    class {public:



  • TyRoXx schrieb:

    hustbaer schrieb:

    Beides im selben Projekt zu verwenden ist Quatsch, weil man dann bei jeder Vorwärtsdeklaration einer Klasse nachsehen muss, ob sie als struct oder class definiert wird.

    Unfug. Der Standard erlaubt explizit dass class/struct bei Fwd. Decl. und Definition nicht zusammenstimmen muss. Gibt auch keinen Grund dafür dass es zusammenpassen müsste.

    Bei einer Klassendefinition ist class vs. struct total wichtig und bei der Deklaration nicht? Wenn man mit den beiden Schlüsselwörtern irgendeinen Unterschied ausdrücken möchte, ist Konsistenz unabdingbar.

    Du hast behauptet dass man bei jeder Vorwärtsdeklaration nachsehen muss ob das Ding ne class oder struct ist. Dem ist nicht so. Darauf habe ich hingewiesen.
    Compiler werfen aber auch gerne Warnings wenn man es falsch erwischt. Dann macht man schnel klicksi-klicksi, ist an der entsprechenden Stelle, ändert es, Save, fertig. Problem = nicht existent.

    hustbaer schrieb:

    Und jetzt heult mich damit voll, dass class für den Leser ja so viel verständlicher und OOP-mäßiger ist, weil es man das in Java und C# auch so schreibt. Oder weil struct in C weniger kann als in C++.

    Du mich auch. Viel Spass noch mit deiner "ich weiss alles besser" Mentalität.

    Bleib sachlich.

    Re.
    Ich meine Hallo, als ob "Und jetzt heult mich damit voll..." sachlich wäre. Freund der Blasmusik....



  • Cyres schrieb:

    struct {
    ist in C++ übrigens das exakt gleiche wie
    class {public:

    Immer noch nicht.



  • Cyres schrieb:

    struct Foo;
    class Foo{};
    int main()
    {
       Foo bar;
    }
    

    ohne Probleme Möglich!

    struct {
    ist in C++ übrigens das exakt gleiche wie
    class {public:

    Nein, Vererbungstyp ist auch anders.



  • Damit meinte ich eigentlich alles, was hinter class kommt. Aufmerksame Leser haben evtl auch bemerkt, dass der Klassenname fehlt 😉


Anmelden zum Antworten