Void Erklären für meinen Ausbildungsleiter
-
Hallo liebe Programmierer,
ich habe eine (für euch) einfache Frage.
Ich soll für meinen Ausbildungsleiter erklären was Void ist, und ihm dies per E-Mail schreiben..das tat ich auch, jedoch war ihm meine Antwort zu mager!
Jetzt hab ich folgenden Text zusammengeschrieben :ANFANG
Void als Wort an sich bedeutet "null, nichts, leere".
Void ist ein Datentyp, der im Gegensatz zu den anderen
Datentypen KEINEN Rückgabewert besitzt.
Er wird dann verwendet wenn an der entsprechenden Stelle keine
Daten verwendet werden,
oder um einen möglichst unspezifizierten
Typ angeben zu können. Void ist wie ein Dummydatentyp,
der eingesetzt wird, wenn man zu beginn der Funktion, den Datentyp noch nicht weiss.
Void in einem Pointer:
Void beim Pointer bedeutet, das der Pointer auf etwas unbestimmtes zeigt.ENDE
wie findet ihr den Text? kann ich den so abschicken?
Bzw. was ist falsch oder was könnte ich ergänzen?
Vielan Dank!
achja: desweiteren soll ich ihm erklären was Polimorphie in der OOP zu tun hat...vielleicht hat da auch noch jemand zeit
-
-
Amazonasmann schrieb:
Void ist ein Datentyp, der im Gegensatz zu den anderen Datentypen KEINEN Rückgabewert besitzt.
Nö. Du kannst
voidals Pseudodatentyp auffassen, aber das Schlüsselwort hat kontextabhängige Bedeutung.
Bei Funktionsdeklarationen gibt es halt an, dass die entsprechende Funktion nichts zurückliefert.Amazonasmann schrieb:
Er wird dann verwendet wenn an der entsprechenden Stelle keine Daten verwendet werden, oder um einen möglichst unspezifizierten Typ angeben zu können. Void ist wie ein Dummydatentyp, der eingesetzt wird, wenn man zu beginn der Funktion, den Datentyp noch nicht weiss.
Nein, das ist schlichtweg falsch.
Amazonasmann schrieb:
Void beim Pointer bedeutet, das der Pointer auf etwas unbestimmtes zeigt.
Das wiederum ist richtig, kannst du so lassen.
Amazonasmann schrieb:
achja: desweiteren soll ich ihm erklären was Polimorphie in der OOP zu tun hat...vielleicht hat da auch noch jemand zeit
Polymorphie heißt das Ding und was weißt du dazu denn schon?
-
Danke für die Antwort filmor

Du hast meinen Text stark dezimiert..ich kann ihm leider nicht nur 2 Sätze zurückschreiben, ich weiß einfach nicht wie ich es ihm genau erklären soll...
und gegoogelt habe ich auch schon ziemlich lange, jedoch nachdem was ich suche nicht wirklich eine Antwort gefunden..
Polymorphie :
Polymorphie heißt so etwas wie Vielgestaltigkeit. Polymorphie steht in direktem Zusammenhang mit der Vererbung und ermöglicht es, verwandte Objekte gemeinsam zu verarbeiten, ohne mittels If oder SWITCH Anweisungen vorher die Klassenzugehörigkeit ermitteln zu müssen.
Aber ich soll es ihm direkt im Zusammenhang mit OOP erklären..
-
hier habe ich meinen Text nochmal umgeschrieben :
ANFANG
Das aus dem Englisch kommende Void bedeutet "Nichts, Leere"
Der Datentyp void läßt sich vielleicht am besten mit "leerer Datentyp" beschreiben.
void gehört zu ANSI-C und ist in früheren C-Versionen nicht vorhanden.Wann wird void verwendet?
1. Als Ergebnistyp von funktionen
2. für leere Paramterlisten von Funktionen
3. zur Kennzeichnung von Zeigern denen kein Datentyp zugeordnet istEine Funktion mit dem Ergebnistyp void liefert keinen Wert zurück,
eine Funktion mit void als Parameterliste erwartet keine Parameter,
und ein void-Zeiger zeigt auf keinen bestimmten Datentyp.ENDE
so besser?
-
Amazonasmann schrieb:
Der Datentyp void läßt sich vielleicht am besten mit "leerer Datentyp" beschreiben.
Ich würde das als halben Fehler ansehen. Für mich ist void kein Datentyp, auch kein leerer Datentyp.
Amazonasmann schrieb:
void gehört zu ANSI-C und ist in früheren C-Versionen nicht vorhanden.
Das wäre mir neu, und kann ich mir nicht vorstellen, müsste aber selbst nachprüfen um hier sicher zu sein.
Amazonasmann schrieb:
Wann wird void verwendet?
1. Als Ergebnistyp von funktionenHier gilt meine gleiche Aussage von oben. Für mich genauer: "Bei Funktionen, um anzuzeigen das diese nichts zurückgeben". Nachtrag: Unterhalb hast du dies auch so stehen, mich stört hier aber "Ergebnistyp", da void eigentlich nichts ist...
Amazonasmann schrieb:
2. für leere Paramterlisten von Funktionen
Ist das in C eigentlich noch verpflichtend? In C++ wäre es möglich, aber üblicher diese tatsächlich leer zu lassen.
Amazonasmann schrieb:
3. zur Kennzeichnung von Zeigern denen kein Datentyp zugeordnet ist
Vielleicht besser: Zur Kennzeichnung von Zeigern unbekannten Typs.
Den das was du einem void-Zeiger zuweist, besitzt schon einen Typ, void-Zeiger verfügen aber nicht über die Information was für einen Typ.Bezüglich Polymorphie hast du meiner Meinung nach zu wenig Eigeninitiative eingesetzt, und mir wäre dies auch zu unspezifisch und allgemein.
Ich gebe dir als weiteren Typ für die Suche "Vererbung", "virtual" (Letzteres nur unter C++).cu André
-
asc schrieb:
Ist das in C eigentlich noch verpflichtend? In C++ wäre es möglich, aber üblicher diese tatsächlich leer zu lassen.
In C sind leere Parameterlisten imho äquivalent zu Ellipsen. Void in Parameterlisten ist also notwendig.
-
Amazonasmann schrieb:
Polymorphie steht in direktem Zusammenhang mit der Vererbung
Nö
Es gibt statische und dynamische Polymorphie, du meinst hier dynamische Polymorphie. Statische Polymorphie sieht so aus, deine Aussage "ermöglicht es, verwandte Objekte gemeinsam zu verarbeiten, ohne vorher die Klassenzugehörigkeit ermitteln zu müssen." passt dazu aber auch:template<typename T> void foo( const T& t ) { int i = t.getVal(); // Hier muss der Typ T ein bestimmtes Interface aufweisen ... }edit: Überladung gilt glaubich auch als statische Polymorphie.
-
@Badestrand: Nur hier würde ich aufpassen. Es mag alles richtig sein, was du sagst. Allerdings vermute ich, dass, wenn Amazonasmann das in seinen Text mitreinbringt, sein Lehrer sagt, das wäre Schwachsinn. Ausser er hat einen tatsächlich guten Lehrer, der richtiges C++ kann. Ich bezweifle das aber, da Amazonasmann sich mit void-Zeigern herumschlagen muss. Etwas, dass ein C++ Programmierer wohl eher selten tut.
-
@Don06 ich muss mich nicht mit Void-Zeigern beschäftigen, sondern lediglich erklären was void ist

Mein Ausbildungsleiter in der Firma ist auch ein Prüfer für Abschlussprüfungen in meiner Umgebung. Er Programmiert denke ich schon über 20Jahre mit C..
-
Amazonasmann schrieb:
Er Programmiert denke ich schon über 20Jahre mit C..
Dann wird er möglicherweise nicht allzu viel über (dynamische) Polymorphie wissen

asc schrieb:
Für mich ist void kein Datentyp, auch kein leerer Datentyp.
Darüber kann man sich jetzt streiten. Was würdest du auf die Frage antworten, welchen Rückgabetyp eine
void-Funktion hat? Wahrscheinlich "keinen". Und was für einen hat dann ein Konstruktor oder Destruktor?
Ich finde es, vielleicht gerade für Anfänger, besser, wenn da besser abgegrenzt wird. "Leerer Datentyp" ist zwar auch nicht ganz das Wahre, aber einfach rein gar nichts ist
voidja doch nicht. Oder was sind dann die Rückgabetypen von Ctors/Dtors, wennvoidbereits nichts ist?
-
asc schrieb:
Ich würde das als halben Fehler ansehen. Für mich ist void kein Datentyp, auch kein leerer Datentyp.
Du betonst wahrscheinlich Datentyp, denn ein Typ ist void auf jeden Fall. Da im C++-Standard nirgends von Datentypen die Rede ist, sondern nur von object types, function types und incomplete types (void ist ein solcher), kann man darüber auch nicht so richtig streiten.
Das wäre mir neu, und kann ich mir nicht vorstellen, müsste aber selbst nachprüfen um hier sicher zu sein.
Im K&R I (deutsche Übersetzung von 1983) wird void zumindest nirgends verwendet, es taucht nur im Anhang auf (wobei der laut Vorwort auch Elemente enthält, die in der ursprünglichen Ausgabe von 1978 nicht enthalten sind.)
Amazonasmann schrieb:
2. für leere Paramterlisten von Funktionen
Ist das in C eigentlich noch verpflichtend? In C++ wäre es möglich, aber üblicher diese tatsächlich leer zu lassen.
Das ist dieses blöde Kompatibilitätsproblem. In K&R hat man halt Funktionen grundsätzlich ohne Parameter deklariert. Will man also in ANSI-C eine Prototypdeklaration anlegen, die eine leere Parameterliste hat, muss man zur Unterscheidung ein void hinschreiben. Tiefere Logik steckt da nicht dahinter, deshalb würde ich auch empfehlen, das in C++ nicht zu machen, auch wenn es geht.
Vielleicht besser: Zur Kennzeichnung von Zeigern unbekannten Typs.
Vorschlag: "unbestimmten" Typs.
-
Nexus schrieb:
asc schrieb:
Für mich ist void kein Datentyp, auch kein leerer Datentyp.
Darüber kann man sich jetzt streiten.
Ja kann man, ich habe nicht ohne Grund "halber" Fehler geschrieben. Als Dozent würde ich hier vermutlich keinen Punkt abziehen und dennoch eine kleine Anmerkung schreiben (mit dem Hinweis das dies eine "Grauzone" ist).
Nexus schrieb:
Was würdest du auf die Frage antworten, welchen Rückgabetyp eine
void-Funktion hat? Wahrscheinlich "keinen". Und was für einen hat dann ein Konstruktor oder Destruktor?
In beiden fällen keinen, wobei bei Funktionen/Methoden mit ausnahme des Konstruktors und Destruktors void angegeben werden muss

Ja, wie gesagt kann man darüber streiten, der Grund für meine Haltung ist aber gerade ein Anfänger gewesen (der seine Probleme mit void hatte).
Nexus schrieb:
Ich finde es, vielleicht gerade für Anfänger, besser, wenn da besser abgegrenzt wird. "Leerer Datentyp" ist zwar auch nicht ganz das Wahre, aber einfach rein gar nichts ist
voidja doch nicht. Oder was sind dann die Rückgabetypen von Ctors/Dtors, wennvoidbereits nichts ist?
Das sehe ich eher als Sonderstellung an. Ebenso wie die Sonderregel das int main implizit ein return 0 macht.
cu André
-
Bashar schrieb:
Du betonst wahrscheinlich Datentyp, denn ein Typ ist void auf jeden Fall. Da im C++-Standard nirgends von Datentypen die Rede ist, sondern nur von object types, function types und incomplete types (void ist ein solcher), kann man darüber auch nicht so richtig streiten.
Okay, mit den 3 Unterscheidungen ist es tatsächlich abgrenzbar sein, wobei ich mir Vorstellen kann das "incomplete Type" als Begriff auch einige Fragen aufwirft.
Bashar schrieb:
Vorschlag: "unbestimmten" Typs.
Das ist ein guter Vorschlag

cu André
-
Badestrand schrieb:
Amazonasmann schrieb:
Polymorphie steht in direktem Zusammenhang mit der Vererbung
Nö
Es gibt statische und dynamische Polymorphie, du meinst hier dynamische Polymorphie. Statische Polymorphie sieht so aus, deine Aussage "ermöglicht es, verwandte Objekte gemeinsam zu verarbeiten, ohne vorher die Klassenzugehörigkeit ermitteln zu müssen." passt dazu aber auch:template<typename T> void foo( const T& t ) { int i = t.getVal(); // Hier muss der Typ T ein bestimmtes Interface aufweisen ... }edit: Überladung gilt glaubich auch als statische Polymorphie.
Wenn dieses statische Zeugs Polymorphie ist, dann ist jede Mehrdeutigkeit Polymorphie. Dann ist die Bezeichnung irgendwie sinnlos.
-
700 Mrd. $ Packet schrieb:
Badestrand schrieb:
Amazonasmann schrieb:
Polymorphie steht in direktem Zusammenhang mit der Vererbung
Nö
Es gibt statische und dynamische Polymorphie, du meinst hier dynamische Polymorphie. Statische Polymorphie sieht so aus, deine Aussage "ermöglicht es, verwandte Objekte gemeinsam zu verarbeiten, ohne vorher die Klassenzugehörigkeit ermitteln zu müssen." passt dazu aber auch:template<typename T> void foo( const T& t ) { int i = t.getVal(); // Hier muss der Typ T ein bestimmtes Interface aufweisen ... }edit: Überladung gilt glaubich auch als statische Polymorphie.
Wenn dieses statische Zeugs Polymorphie ist, dann ist jede Mehrdeutigkeit Polymorphie. Dann ist die Bezeichnung irgendwie sinnlos.
Uiii, das erinnert mich an einen ellenlangen Thread wos genau darum ging:
Polimorphie - dynamisch, statisch, Überladung, Templates ???
Simon
-
[quote="asc"]
Amazonasmann schrieb:
Ich würde das als halben Fehler ansehen. Für mich ist void kein Datentyp, auch kein leerer Datentyp.
Das liegt aber auch daran, dass du eine absolut beschissene und zudem auch noch vollkommen falsche Vorstellung davon hast, was ein Datentyp ist.
-
Bashar schrieb:
Vielleicht besser: Zur Kennzeichnung von Zeigern unbekannten Typs.
Vorschlag: "unbestimmten" Typs.
Besser: "unvollständig".
Unbestimmt wäre indeterminate, was sich für gewöhnlich auf Objektzustände bezieht.
-
Void is a type specifying a typeless type.
-
camper schrieb:
Besser: "unvollständig".
Unbestimmt wäre indeterminate, was sich für gewöhnlich auf Objektzustände bezieht.incomplete gibts aber schon