Verständnisfrage zum Typ void
-
Hallo zusammen,
in meinem Tutorial geht es gerade um den Typ void. Ich habe hier einen Teil eines Programms, das entweder Zinsen, Przentsatz oder das Kapital berechnen soll, wenn man zwei Werte eingegeben hat. Leider verstehe ich noch nicht ganz, wann ich nun void nutzen soll. Hier ist die Klassenvereinbarung:class TZins : public TObject { public: float Kapital; float Prozent; float Zinsen; void __fastcall SetKapital(String Text); void __fastcall SetProzent(String Text); void __fastcall SetZinsen (String Text); String __fastcall GetKapital (void); String __fastcall GetProzent (void); String __fastcall GetZinsen (void); __fastcall TZins (void); };
Wenn ich nun die Methode SetKapital vereinbare (ich tippe also einen Wert für das Kapital ein), warum muss das vom Typ void sein, obwohl es doch auch einen String aufnimmt? Wenn ich nun die Methode GetKapital vereinbare (das Programm berechnet mit Kapital, wenn dieser Wert gesucht ist), warum muss dieser vom Typ String sein, aber der Parameter void???
Beide Methoden nehmen doch irgendwie einen String auf, oder?? Wann nimmt eine Methode einen String als Parameter auf??
Leider habe ich die Antwort zu der wohl auf einem sehr niedrigen Niveau liegende Frage nicht per Google bzw. Suchfunkion finden können! Daher hoffe ich, dass ich mir helfen könnt!Vielen Dank
lg, freakC++
-
schau dir mal den unterschied zwischen einem rückgabewert und einem parameter einer funktion an
-
Vielen dank für den Tipp. Hab ich gemacht. Kann man also sagen:
Wenn es einen Rückgabewert gibt, darf die Methode nicht vom Typ void sein, sondern beispielsweise float. Übernimmt sie jedoch nur einen Wert, dann macht man dies mittels des Parameters und die Methode ist vom Typ void!!!
Herzlichen dank
lg, freakC++
-
Das kann man so nicht verallgemeinern. Bei Accessoren/Manipulatoren (get/set Methoden) ist das im Regelfall so.
Eine Funktion/Methode hat normalerweise 4 Elemente:
- Einen Rückgabetyp
- Eine Aufrufkonvention (optional)
- Einen Namen
- Eine Liste von Aufrufparametern (optional)
Zu 1)
Vor der Standardisierung 1996 konnte der Rückgabetyp ausgelassen werden und es wurde standardmässig ein int (oder unsigned int, weiss nicht mehr genau) zurückgegeben, nach der Standardisierung ist der Rückgabetyp Pflicht. Er definiert den Datentyp, den eine Funktion als Ergebnis zurückgibt. Wenn eine Funktion kein Ergebnis zurückgibt muss dies durch den Datentyp void gekennzeichnet werden.Zu 2)
Die Aufrufkonvention legt fest, in welcher Reihenfolge die Funktionsparameter auf dem Stack abgelegt werden und wer sie wieder vom Stack nimmt. Die Windows 32 API benutz __stdcall, dabei werden die Funktionsparameter von der aufgerufenen Funktion vom Stack genommen; die Aufrufkonvention __fastcall benutzt Register, wenn möglich, um Funktionsparameter zu übergeben. In C und C++ ist die Standardaufrufkonvention __cdecl, hier werden die Funktionsparameter von der aufrufenden Funktion wieder vom Stack genommen.Zu 3)
Der Funktionsname muss eindeutig sein und den Namensrichtlinien entsprechen. Bei member Funktionen von Klassen muss der Klassenname angegeben werden, zu dem die Methode gehört.Zu 4)
Eine Funktion erwartet normalerweise eine fest Anzahl von Funktionsparametern, wobei natürlich auch 0 Parameter gültig sind. Wenn eine Funktion keine Parameter erwartet kann man die Parameterliste entweder leer lassen oder als Parametertyp void angeben.Welche Parameter deine Funktion erwartet und was sie zurückgibt liegt an deinem Design.
Gruß,
Doc
-
Hi,
vielen Dank für deine ausfühliche Antwort. Sie hat mir echt geholfen! So etwas hilft mir besonders, wenn etwas so genau erklärt wird!!lg, freakC++