Void pointer oder überladene Funktion
-
Hallo zusammen
Ich arbeite mich zurzeit gerade in C++ ein und bin auf die sog. void pointer gestossen. Dabei habe ich mich nach dessen Sinn rsp. dessen Verwendungsbereich gefragt. Wann verwendet man besser void pointer als überladene Funktionen? Im Folgenden ein kleines Programm, welches ich geschrieben habe:
#include <iostream> using namespace std; void inc_ol(int &a); void inc_ol(char &a); void inc_vp(void* a,int size); int main(){ int i = 2; char c = 'x'; //Inkrementierung von i und c per überladene Funktion inc_ol(i); inc_ol(c); cout << i << " " << c << endl; //Inkrementierung von i und c per void pointer inc_vp(&i,sizeof(i)); inc_vp(&c,sizeof(c)); cout << i << " " << c << endl; return 0; } void inc_ol(int &a){ a++; } void inc_ol(char &a){ a++; } void inc_vp(void* a,int size){ if(size == sizeof(char)){ char* pchar = (char*) a; (*pchar)++; } else if(size == sizeof(int)){ int* pint = (int*) a; (*pint)++; } }Ausgabe:
3 y 4 zDie Implementierung per überladene Funktionen ist deutlich einfacher so wie ich finde. Was ist genau der Vorteil hier von der void pointer Version? Gibt es überhaupt einen? Gibt es bessere Situationen um void pointer zu verwenden?
Ich danke vielmals für die Aufklärung

MfG
Dread
-
Dreadslayer schrieb:
Die Implementierung per überladene Funktionen ist deutlich einfacher so wie ich finde.
Und sollte man in C++ auch verwenden.
Dreadslayer schrieb:
Was ist genau der Vorteil hier von der void pointer Version? Gibt es überhaupt einen? Gibt es bessere Situationen um void pointer zu verwenden?
In C kann man keine Funktionen überladen. Daher verwendet man zum Teil so ein oder so ähnliches Vorgehen.
Grüssli
-
Vielen Dank für Deine Antwort Dravere.
Solange man also Funktionen überladen kann (wie in C++) werden void pointer gar nie benötigt?
-
Dreadslayer schrieb:
Solange man also Funktionen überladen kann (wie in C++) werden void pointer gar nie benötigt?
Man kann
void-Zeiger noch für vieles anderes verwenden. Einvoid-Zeiger ist schliesslich einfach nur ein Zeiger ohne Typangabe. In C++ kommen sie aber eher selten vor, weil man zum Beispiel auch Templates hat und man Wert auf Typsicherheit legt, welche bei einemvoid-Zeiger verloren geht.Man kann also nicht sagen, dass ein
void-Zeiger gar nicht benötigt wird in C++. Aber im allgemeinen ist es wirklich sehr selten oder nur für ganz spezielle Fälle. Allerdings wohl nie für den von dir aufgezeigten Fall.Grüssli
-
template<class T>
void inc_ol(T &a){ a++; }copy&paste der selben funktion nur mit minimalen aenderungen sollte man grundsaetzlich versuchen zu meiden, oder wenigstens nur den "unterschied" seperate implementieren und dann den gemeinsammen teil in eine seperate funktion stecken die nur einmal maintained werden muss. (also falls statt a++ noch viel mehr vorhanden sein wuerde).
aber in dem fall sollte ein template doch recht passend sein.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.