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

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

11

21.07.2008, 00:59

Zitat von »"Deviloper"«

So sah das Konzept einer Struktur irgendwann bestimmt mal aus ...


Sry Devil, falls das etwas sehr noobig erklärt ist, ich habs wenigstens versucht zu erklären(was man von dir ja nicht grade sagen kann). Und da ich davon ausgehe, dinge wie Konstruktoren, oepratoren etc werden in seinem Buch erst später behandelt, hab ich eben jenes grundlegende Beispiel genommen. Beim nächsten mal machs doch einfach besser und liefer ihm die deiner meinung nach "richtigere" erklärung. Aber solche sätze wie der grade von dir haben zwar viele buchstaben aber wohl wenig nützlichen Inhalt.

Socke

12

21.07.2008, 01:17

Na gut machen wir es einfach:
Da unter C++ Klassen fast identisch wie Strukturen behandelt werden, kann man beides mit einem Beispiel erklären.

Stell dir vor, es gibt eine Basis, bsw. Mensch, dann wärest du die Instanz, oder du hast die Klasse Bild ... wenn du aber ein bestimmtes Bild vor dir hast, ist das die Instanz davon, mit seinen Pixeln (hat-Beziehung), seiner Breite u. Höhe (hat-Beziehung), usw.

Z.B. so:

C-/C++-Quelltext

1
2
3
4
5
6
class Picture
{
    unsigned char* m_data;
    std::size_t m_width; 
    std::size_t m_height;
};


Bei einer Struktur hat aber (standardmäßig) jeder Zugriff (public) von außen auf die Daten, bei Klassen normal nur sie selbst (private), es sei denn du gibst es extra an.

In C++ ausgedrückt:

C-/C++-Quelltext

1
2
3
4
5
struct foo
{};
// ==

class foo
{ public: };

u.

C-/C++-Quelltext

1
2
3
4
5
struct foo
{ private: };
// ==

class foo
{};
...

Deswegen wird eine Struktur oft benutzt um Daten einfach zusammen zu fassen, was unter C sogar meist auch die Aufgabe davon war. (Es gab noch keine Klassen u. damit verbunden Konstruktoren usw.)

Unter C++ gibt es aber nun auch sowas wie Konstruktoren, Destruktoren, Memberfunktion, Vererbung usw. . Also nichtmehr nur eine einfache Ansammlung von Variablen. Dann wäre bsw. die Klasse da oben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
class Picture
{
    unsigned char* m_data;
    std::size_t m_width; 
    std::size_t m_height;

public:
    Picture(const std::size_t width, const std::size_t height, const unsigned char* ptr_data)
        : m_width(width), m_height(height), m_data(new unsigned char[width * height])
    { std::copy(ptr_data, ptr_data + height * width, m_data); }
    ~Picture()
    { delete [] m_data; }
};
... vllt. noch ein paar Funktionen dazu. usw.

Aber am besten suchst du dir mal nen Buch, dass dir den OO-Gedanken nahe bringt.


Ach mist die Erklärung war genauso scheiße ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

13

21.07.2008, 02:27

Ok jetzt weiss er, was Strukturen einmal waren, dass sie heute aber klassen ähnlich sind, dass es Konstruktoren etc gibt... aber mehr wissen als zur zeit seiner fragestellung tut er vermutlich immer noch nicht. Ich würde vorschlagen, er liesst sich sein kapitel über strukturen nochmal neu durch, mit dem gesagten im hinterkopf. Das OOP-Buch das Devil erwähnt hatte ist mit sicherheit keine schlechte Idee, aber dazu sollte man die grundlagen schon beherrschen, denn ein OOP Buch wird auch nicht erklären, was eine Klasse nun genau ist, sondern eher, was man damit so alles machen kann.

@Devil: Interessanter Versuch :D

Socke

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

14

21.07.2008, 08:37

Zitat von »"Faule Socke"«

Ok jetzt weiss er, was Strukturen einmal waren, dass sie heute aber klassen ähnlich sind, dass es Konstruktoren etc gibt...


Strukturen sind Klassentypen. Sie haben genau die Eigenschaften die Klassen haben (dürfen). Der einzige Unterschied ist der class-key, der ist bei Strukturen struct, und die Zugriffsspezifizierung. Letztere ist bei Strukturen defaultmäßig public.

Ansonsten gibts keinen Unterschied zwischen class, union und struct.
@D13_Dreinig

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

15

21.07.2008, 09:33

Zitat von »"David_pb"«

Ansonsten gibts keinen Unterschied zwischen class, union und struct.

Ich dachte immer Klassen hätten gegenüber Stukturen einen gewissen Overhead - Fehlinformation?
<< an dieser Stelle ist eine Signatur verstorben >>

16

21.07.2008, 11:31

Korrekt.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

17

21.07.2008, 13:05

Zitat von »"the[V«

oid"]

Zitat von »"David_pb"«

Ansonsten gibts keinen Unterschied zwischen class, union und struct.

Ich dachte immer Klassen hätten gegenüber Stukturen einen gewissen Overhead - Fehlinformation?


Jo, Fehlinformation.
@D13_Dreinig

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

18

22.07.2008, 02:31

öhm, zumindest unions haben schon noch nen kleinen zusätzlichen Unterschied zusätzlich zu dem was du da zusammengeschrieben hast (oder hab ich nur irgendwas überlesen?)^^

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

19

22.07.2008, 09:11

Zitat von »"grek40"«

öhm, zumindest unions haben schon noch nen kleinen zusätzlichen Unterschied zusätzlich zu dem was du da zusammengeschrieben hast (oder hab ich nur irgendwas überlesen?)^^


Ja, stimmt. Bei Unions gibts noch ein paar Abweichungen.
@D13_Dreinig

20

22.07.2008, 13:22

Union hat meines Wissens nicht ein bisschen was mit class/struct zu tun.

Ich habe mich mal schlauer gemacht:

Zitat

C++ union notes:

* The union can employ a constructor to initalize variables.
* The union can employ a destructor.
* Union member functions can NOT be declared virtual.
* Union member variables are public by default.
* A union's data members can NOT be declared static.
* A union can not be used as a base class.


Quelle: http://www.yolinux.com/TUTORIALS/LinuxTutorialC++Structures.html

Muesste jetzt im Stroustrup nachsehen und das nachpruefen.

Werbeanzeige