Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

PD

unregistriert

11

27.01.2005, 17:01

Ursprüglich hatten structs nur Variablen/Pointer. Also keine methoden und keinen konstruktor (jedenfals keinen den man selbst hätte definieren können). Aber nachdem die Klassen kamen nehme ich an das die structs auch aufgearbeitet wurden. Vielleicht um missverständnissen vorzubeugen oder so, kA ^^ Ich seh keinen tieferen sinn mehr in structs wenn man doch klassen hat, außer man will wirklich nur C Proggen.

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

12

29.01.2005, 11:16

Zitat

unter c++ is afaik der wirklich einzige unterschied zwischen klassen und structs, dass bei structs alle mebmers per default public sind, bei klassen dagegen private...

Fast: Es wird by default öffentlich geerbt.


Aber zurück zum Thema:

Übersetzen lässt sich die Klasse nicht, weil ein Semikolon hinter der Struct fehlt.

Die gewünschte Synthax:

C-/C++-Quelltext

1
2
xyz grooovie; 
grooovie.Graphics.render();


Wirst du so aber immernoch nciht erhalten.

Es wäre dann

C-/C++-Quelltext

1
2
3
xyz grooovie; 
xyz.Graphics whatever;
whatever.render();

Graphics ist einfach nur ein Typ, der im Scope der Klasse definiert ist.

Lösen könntest du das so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
class xyz { 
public: 
    void Init(); 

    struct GraphicsImpl  { 
         void render(); 
         void move(); 
         void initHL2graphics(); 
    } graphics;
};


Dann wäre immerhin

C-/C++-Quelltext

1
2
xyz grooovie; 
grooovie.graphics.render();

möglich.

Allerdings hätte 'graphics' keinen bezug zum 'groovie'-Objekt.

Du müsstst das ganze dann so machen:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class xyz { 
public: 
    xyz ()
        : graphics(this)
    {}
    void Init(); 

    struct GraphicsImpl  { 
         GraphicsImpl (xyz * that)
            : that(that)
         {}
         void render(); 
         void move(); 
         void initHL2graphics(); 
    private:
        xyz * that;
    } graphics;
};


Verwendung bliebe die selbe. Die Methoden 'xyz::GraphicsImpl::render', 'xyz::GraphicsImpl::move' und 'xyz::GraphicsImpl::initHL2graphics' müssten dann 'that' verwenden, um auf's xyz-Objekt bezug zunehmen (analog zu this normalerweise).
Why is 6 afraid of 7?
Because 7 8 9

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

29.01.2005, 13:56

Zitat

Fast: Es wird by default öffentlich geerbt.


hey, wusst ich gar nicht.

aber wer macht schon sowas...

Anonymous

unregistriert

14

14.02.2005, 09:34

Sehr interessant, dass structs in Klassen als Unsinn angesehen werden:

Zitat

Ich seh keinen tieferen sinn mehr in structs wenn man doch klassen hat, außer man will wirklich nur C Proggen.


Ich benutze z.B. ein PlugIn System für meine Engine und der PluginManager, der eine Klasse darstellt nutzt intern ein struct, um ein PlugIn zu beschreiben, z.B.

C-/C++-Quelltext

1
2
3
4
5
struct PluginInfo
{
IPlugin* pPlugin;
std::string strType;
};


Würde ich für so eine kleine Struktur eine Klasse anwenden würde das zwar gehen, aber es würde doch ungewöhnlich aussehen. Für das Strukturieren von ein paar Variablen eignet sich ein struct perfekt. Und es verdeutlicht die Verwendung beim Code lesen auch viel besser.

Warum nutze ich so ein struct überhaupt?
Der Vorteil liegt in der Verwendung von Container.
Ich lese z.B. alle PlugIns in eine List ein, z.B. std::list und die Liste hat als Elemente Objekte des structs. Daher kann ich jegliche Information über ein PlugIn bequem in einer Liste speichern.

Und ich schreibe meinen Code generell in C++ und OO.[/cpp]

weigo

Treue Seele

Beiträge: 234

Wohnort: Deutschland

  • Private Nachricht senden

15

14.02.2005, 09:37

Der letzte Beitrag war übrigens von mir!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

14.02.2005, 18:49

ich verwend auch structs wenns darum geht, variablen dem sinn nach zu gruppieren, sieht einfach besser aus...

du kannst genau so gut container mit elementen vom typ einer klasse anlegen, macht absolut keinen unterschied.
außerdem solltest du dir überlegen, obs sich nicht auszahlen würd in deinem container zeiger auf structs zu speichern, da sonst bei jedem funktionsaufruf usw. die daten kopiert werden.

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

17

14.02.2005, 19:58

Zitat von »"dot"«

außerdem solltest du dir überlegen, obs sich nicht auszahlen würd in deinem container zeiger auf structs zu speichern, da sonst bei jedem funktionsaufruf usw. die daten kopiert werden.

Seit wann das denn?

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

18

14.02.2005, 20:19

Zitat

außerdem solltest du dir überlegen, obs sich nicht auszahlen würd in deinem container zeiger auf structs zu speichern, da sonst bei jedem funktionsaufruf usw. die daten kopiert werden.

Optimiert wird doch bitte erst dann, wenn es sich als Flaschenhals herausstellt. Und wo da genau kopiert wird musst du mir auch nochmal erklären.
Why is 6 afraid of 7?
Because 7 8 9

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

19

15.02.2005, 12:37

sorry, das mit dem kopieren war blödsinn ;)

hab grad erst gesehn, dass da per referenz übergeben wird...

Werbeanzeige