struct & typedef



  • Hi, ich habe mal eine Frage zu struct.
    Worin besteht der unterschied bei:

    struct
    {
    } blabla;
    

    und

    struct blabla
    {
    }
    

    Ich habe bei der Benutzung keinen Unterschied bemerkt, aber es sollte doch einen geben.

    An dieser Stelle wäre es noch schön, wenn man mir sagt, wann und wo typedef angebracht ist.



  • struct { ... } blabla; definiert eine Variable vom Typ einer anonymen Klasse, die gleichzeitig mitdefiniert wurde.

    struct blabla { ... }; definiert eine Klasse mit dem Namen blabla, aber keine Variable.



  • Ja ok, aber wo ist da der Unterschied bei der Benutzung. Ich habe keinen bemerkt es hat jedesmal funktioniert.

    Es müßte doch wenigstens eine Veränderung geben, wenn ich so etwas mache:

    struct obj1{};
    struct {}obj2;
    
    obj1 test1;
    obj2 test2;
    

    aber auch da habe ich keine Veränderung der funktionalität bemerkt.



  • Beim ersten erzeugst du geneu EINE struktur die den Namen blabla hat, hast aber in Zukunft nie wieder die Chance ein zweites blabla zu erschaffen.

    Beim zweiten erzeugst du garkein mal die Struktur hast aber in Zukunft die Möglichkeit beliebig viele blabla´s zu erzeugen indem du selbige wie einen Typen benutzt.

    blabla erste_struktur;
    blabla zweite_struktur;
    blabla viele_strukturen[100];
    blabla* blabla_pointer;
    // usw
    

    Und ich würd statt struct lieber class benutzen.

    Und typedefs sind zum Beispiel bei templates angebracht.
    Beispielsweise der string aus der STL ist eigentlich ein template namens
    basic_string<char>(oder so), also das template basic_string mit dem typen char als "Buchstabenbehälter".
    Da das aber halt ziemlich mies zu tippen wäre hat man stattdessen ein typedef namens string genommen.



  • Ok, ich glaub ich habs verstanden.
    Falls ich nochmal Probleme bekommen sollte melde ich mich nochmal.



  • Original erstellt von daishi:
    **
    Es müßte doch wenigstens eine Veränderung geben, wenn ich so etwas mache:

    struct obj1{};
    struct {}obj2;
    
    obj1 test1;
    obj2 test2;
    

    aber auch da habe ich keine Veränderung der funktionalität bemerkt.**

    Das zweite funktioniert nicht.



  • öhm

    struct obj1 { };
    struct { } obj2;
    
    obj1 test1;
    obj2 test2;
    

    das ist falsch und geht nicht!

    Wie Bashar bereits erklärt hat

    struct obj1 { };
    

    nun hast du einen neuen Typen geschaffen, der obj1 genannt wird.

    obj1 test1;
    

    nun hast du ein Objekt test1 vom Typ obj1 angelegt

    struct { } obj2;
    

    nun hast du ein Objekt obj2 von einem anonymen Typ angelegt.

    nun zum typedef:

    typedef struct { } obj2;
    

    ist dagegen was anderes und wird in C benutzt, da struct in C ein wenig anders arbeitet.

    @dreaddy

    Und ich würd statt struct lieber class benutzen.

    wieso?



  • Eigentlich nur weil struct mehr so im Verruf steht C zu sein und class in Verbindung mit C++/OOP steht.
    Ist zwar abgesehen vom default public/default private kein Unterschied beim programmieren, aber strukt ist in meinen Augen irgendwie ein Überbleibsel aus C.



  • Original erstellt von Bashar:
    Das zweite funktioniert nicht.

    Doch, ich habe den Spaß in der *.h stehn und rufe es in der *.cpp auf
    Bsp.:

    typedef struc
    {
    }object;
    

    und dann der Aufruf

    object ding;
    

    Also bei mir geht es so.



  • Sag mal, willst du mich ver*****en? Das, von dem ich gesagt habe, dass es nicht geht, war ohne typedef.



  • Tschuldigung, dann habe ich mich wohl nicht richtig ausgedrückt.



  • Also ich benutze class für komplette Programmteile um sie zu kapseln und struct, so wie es unter C gedacht war, zur reinen Kapselung von Datentypen. Ich halt das auch für recht sinnvoll, weil dafür wurde das ganzeja geschaffen, also warum ne klasse nehmen und da noch public vorschreiben müssen??

    das mit dem "typedef struct{}foo;" und "struct foo{};" ist auch schonmal in nem anderen Thread erklärt worden -> Suchefunktion wens interessiert 😉

    [ Dieser Beitrag wurde am 21.06.2003 um 03:05 Uhr von THE_FreaK editiert. ]



  • also warum ne klasse nehmen und da noch public vorschreiben müssen??

    Du willst mir also sagen, das du komplett private Klassen hast? Und wofür verwendest du die dann?



  • er meint sicher

    class a {
    public:
     int foo;
     int bar;
    };
    

    vs.

    struct a {
     int foo;
     int bar;
    };
    

    ich benutze immer structs, wenn es entweder keine private/protected Elemente gibt.



  • ich benutze immer structs, wenn es entweder keine private/protected Elemente gibt.

    Wo ist das oder?



  • @kingruedi Genau das meinte ich. 🙂
    @Helium Genasu verkehrtherum interpretiert 😉

    Ich benutze structs für Variablenansammlungen. Bei ner Klasse müsste ich sonnst entweder public drüber schreiben oder Methdoen zur verwaltung basteln, was ich beides für quatsch halte.


Anmelden zum Antworten