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

babelfish

Alter Hase

  • »babelfish« ist der Autor dieses Themas

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

1

17.07.2006, 11:26

C und Klassen

Ich versuche gerade mit C für den Nintendo DS zu proggen, dabei fällt mir auf dass irgendetwas mit den Klassen nicht stimmt.

Sind diese in C nicht möglich oder akzeptiert der PAlib Kompiler die nicht?
Da ich aber C++ gelernt habe könnte es natürlich auch sein dass ich sie falsch schreibe..

Meine Klasse:

C-/C++-Quelltext

1
2
3
4
5
class CKlasse
{
public:

};

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

2

17.07.2006, 11:41

Klassen sind Elemente der objektorientierten Programmierung und C ist keine objektorientierte Sprache. Klassen werden in C also nicht unterstützt.
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

17.07.2006, 11:47

Aber meines Wissens nach gibt es die structs in C und wenn man da noch ein paar Funktionspointer einfügt, dann kann man sich soweit ich weiß ein Klassenähnliches Konstrukt bauen.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

4

17.07.2006, 11:50

Verwende Strukturen. Die sind AFAIK dasselbe, nur dass Elemente, vor denen kein public oder private steht, im Gegenteil zu Klassenelementen automatisch als public (und nicht als private) deklariert werden.

C-/C++-Quelltext

1
2
3
4
class Test
{
char Zeichen; // Zeichen ist private

}


C-/C++-Quelltext

1
2
3
4
struct Test
{
char Zeichen; // Zeichen ist public

}

babelfish

Alter Hase

  • »babelfish« ist der Autor dieses Themas

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

5

17.07.2006, 11:52

Ja, aber ich brauche Funktionen...
zB. Player[1].init(); Player[2].init(); etc.

Zitat von »"big_muff"«

Klassen sind Elemente der objektorientierten Programmierung und C ist keine objektorientierte Sprache. Klassen werden in C also nicht unterstützt.


Naja, gut zu wissen...

Zitat von »"Nox"«

Aber meines Wissens nach gibt es die structs in C und wenn man da noch ein paar Funktionspointer einfügt, dann kann man sich soweit ich weiß ein Klassenähnliches Konstrukt bauen.


Das versteh ich schon weniger, :lol:

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

6

17.07.2006, 11:56

Das gleiche sind sie nun aber sicher nicht. Sicher kann man eine Struktur mit Funktionspointern füllen, aber damit diese Funktionen, dann auch auf die "Klassenelemente" zugreiffen können (this-Pointer), müssten ihr dann auch ein Zeiger auf die Struktur in der sie sich befinden übergeben werden. Das ganze wird so recht verwirrend und kompliziert.

Ich würde deshalb vorschlagen: Wenn schon C, dann aber richtig. Es geht auch ohne Klassen. Du musst dann einfach mehr darauf achten, dass du keine Elemente veränderst, die du nicht verändern solltest und die Funktionen sind dann halt nicht so schön gruppiert, aber du wirst es überleben...
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

babelfish

Alter Hase

  • »babelfish« ist der Autor dieses Themas

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

7

17.07.2006, 12:01

Zitat von »"big_muff"«

Du musst dann einfach mehr darauf achten, dass du keine Elemente veränderst, die du nicht verändern solltest und die Funktionen sind dann halt nicht so schön gruppiert, aber du wirst es überleben...


Na gut,
hab' ja noch Zeit um mich daran zu gewöhnen. :oops:

Sollte jemand der es zeigen möchte zufälligerweise so ein Pointer Beispiel haben, dann wäre das allemal nützlich :!: :)

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

8

17.07.2006, 12:02

Zitat von »"babelfish"«

Ja, aber ich brauche Funktionen...
zB. Player[1].init(); Player[2].init(); etc.


Mach es doch einfach so: Du nimmst eine Struktur "PlayerInfo" oder so, mit allen Informationen. Dann machst du eine globale Funktion InitPlayer(PlayerInfo *pSPlayer, ...), mit der du dann die Daten intialisierst und eine Funktion ExitPlayer(PlayerInfo *pSPlayer) falls du Daten in der Struktur freigeben musst...
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

9

17.07.2006, 12:19

So wie big_muff das schreibt, ist das der richtige Weg eine Objektorientierung in C zu realisieren. Du musst eigentlich nur selbst dafür sorgen, dass der "this" Zeiger an die Methoden übergeben wird. Man muss eben ein wenig mehr aufpassen, dass man seine Objekte auch selbst wieder freigibt, und welche Methoden zu welchen Objekten gehören.

Also: In C gibt es zwar keine Klassen, man kann aber trotzdem objektorientiert programmieren. Die Sprache hilft einem nur nicht dabei. 8)

Sonst muss ich noch sagen: wenn du noch nicht gut weisst, was es mit Funktionszeigern auf sich hat, vergiss das gleich wieder. :) Die braucht man für die einfachen Fälle gar nicht. Die komplizierten Fälle (virtuelle Methoden) sind nicht eben einfach in C zu realisieren.

MfG,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

10

17.07.2006, 13:33

Ich weiß nicht, ob das bei C mit den Strukturen anders ist, aber in "Goldene Regeln der Spieleprogrammierung" steht, dass - bis auf die von mir genannte Tatsache - Klassen und Strukturen dasselbe sind. Und dass die Strukturen in C++ dasselbe wie in C sind, wegen der Abwärtskompatiblität.

Also können in Strukturen auch ganz normale Funktionnen aufgerufen werden, sie können einen Konstruktor haben etc. etc.

Werbeanzeige