"oop" in c und die class.d
-
Hallo c-Community,
ich versuche mich derzeit in die Ansätze der "objektorientierung" für c einzuarbeiten (bitte keine Grundsatzdiskusionen ob c wirklich oop-fähig ist, ich versuche die Vorgehensweise zu verstehen!). Also ich arbeite mich mit folgendem Link http://www.mathematik.uni-ulm.de/sai/ws96/seminar/neher/ ein.
Also ich habe schon verstanden, wie ich mit den Funktionszeigern für die Funktionen new, delete und copy umgehen muss um mir einen Zeiger für alle Konstruktoren von Klassen mit ähnlichem Aufbau zu erhalten. Allerdings verstehe ich noch nicht, was die Datei class.d, welche den Prototypen aller ähnlichen Klassen darstellen soll bewirkt? Wenn ich die Datei ala:
#include "class.d"
einbinde, wie im Tutorial gemacht wird, werden die Zeiger auf die Classe:
const struct Class* class = _class
nicht akzeptiert, und die Verwendung von class.d vom Kompiler kritisiert. Kann mir jemand eventuell sagen, wie ich das verstehen soll oder vieleicht eine einfachere Möglichkeit der oop in c nennen (tutorial wäre auch ok).
Vielen Dank
mirrowwinger
-
Kannst du ein bisschen genauer sagen, was du für Fehler hast? Ansonsten halten wir dich jetzt erst einmal für doof und geben solche Antworten:
mirrowwinger schrieb:
Wenn ich die Datei ala:
#include "class.d"
einbinde, wie im Tutorial gemacht wird, werden die Zeiger auf die Classe:
const struct Class* class = _class
nicht akzeptiert
Die Klasse heißt ja auch struct CLASS.
und die Verwendung von class.d vom Kompiler kritisiert.
Dann hast du etwas falsch gemacht. Mehr kann man nicht sagen, weil du nicht sagst, was überhaupt los ist.
Kann mir jemand eventuell sagen, wie ich das verstehen soll oder vieleicht eine einfachere Möglichkeit der oop in c nennen (tutorial wäre auch ok).
Tja, es ist eben ein bisschen schwer, eine Objektorientierung einer Sprache ohne eingebaute Unterstützung dafür aufzudrücken. Was hast du erwartet?
Wenn's über eine Sammlung von Structs und Funktionen auf diesen Structs hinausgeht, dann wird's eben etwas komplexer.
-
Ok das ist sicherlich eine andere Antwort, die ich vieleicht erwartet hätte, aber ich habe auch selber Probleme gehabt, mich durch die Problematik zu arbeiten. Soviel habe ich jetzt selber herausgefunden:
Also das in der class.d Datei stellt eigentlich nur den Pointer zu allen "Objekten" dar, welche man auch irgendwann variabel ansprechen möchte. Diesen Pointer verwendet man dann in Funktionen wie new, um entsprechend nur eine Funktion hat, mit der man alle (in diesem Fall) Konstruktoren gleich aufgebauter Klassen ansprechen möchte.
*Was ich jetzt noch nicht verstanden habe, ist warum dies in dem Tutorial in einer .d- und nicht wie üblich in einer .h-Datei getan wird? Also ich habe das jetzt abgewandelt und habe mir eine .h-Datei angelegt, in der sowohl der Pointer als auch die Deklarationen der grundlegenden Funktionen (new, delete, copy, ...) enthalten sind und eine .c Datei, in der die entsprechenden grundlegenden Funktionen ihren Quellcode haben.Kann mir jemand die (fett hervorgehobene) Frage beantworten?
Mfg
-
Häng dich doch nicht so an einem Namen auf. Namen und Dateiendungen sind technisch gesehen Schall und Rauch und dienen nur dem Menschen zur Orientierung. Vielleicht meinen sie mit class.d, dass dort die Klassendeklarationen drin sind und so soll getrennt werden zwischen dem öffentlichen Interface (.h), der Implementierung (.c) und Implementierungsdetails die in einen Header müssen, aber nicht zum öffentlichen Interface gehören (.d).
-
SeppJ schrieb:
Namen und Dateiendungen sind technisch gesehen Schall und Rauch
Hast du schon mal versucht eine .h Datei mit einem C-Compiler zu kompilieren ?
-
merano schrieb:
SeppJ schrieb:
Namen und Dateiendungen sind technisch gesehen Schall und Rauch
Hast du schon mal versucht eine .h Datei mit einem C-Compiler zu kompilieren ?
Für irgendwelche Default-Einstellungen bei gewissen Compilern bei bestimmten Dateiendungen kann ich auch nichts. Aber wenn du dem Compiler sagst, dass das C sein soll, dann schluckt der auch eine .h-Datei als solches. Und dem Include, wie in diesem Fall, ist die Dateiendung erst recht egal.
-
SeppJ schrieb:
wenn du dem Compiler sagst, dass das C sein soll, dann schluckt der auch eine .h-Datei als solches.
Wüsste nicht wie das gehen soll ohne den Compiler zu patchen
Sollte es doch eine Möglichkeit für VC (oder auch gcc) geben wäre ich
interessiert.SeppJ schrieb:
Und dem Include, wie in diesem Fall, ist die Dateiendung erst recht egal.
Das wird wohl so sein, aber deine Aussage klang generell ..
-
merano schrieb:
Sollte es doch eine Möglichkeit für VC (oder auch gcc) geben wäre ich
interessiert.gcc -x c test.h
Gibt's für andere Compiler mit Sicherheit auch.
-
merano schrieb:
Sollte es doch eine Möglichkeit für VC (oder auch gcc) geben wäre ich interessiert.
Bei VC machst du einen Rechtsklick auf das File, dann auf Properties und unter General findest du Item Type, dort stellst du auf C/C++ Header. Allenfalls musst du noch sagen: "Exclude from Build: no". Das ist, wenn das File direkt der Solution beigefügt wurde.
Dieinclude
Direktive bei VC aktzeptiert alles! Da kannst du sogar ein PDF oder JPG inkludierenGrüssli