-
return 0, return 1
Code:
#include <iostream>
using namespace std;
class KONTO
{
private:
int KONTOSTAND;
public:
int WERT_AENDERUNG(int);
int KONTOSTAND_LESEN();
};
int KONTO::WERT_AENDERUNG(int EINGABE) {
if ((EINGABE>=0)&&(EINGABE<=100000)) {
KONTOSTAND=EINGABE;
return(1);
}
return(0);
}
int KONTO::KONTOSTAND_LESEN()
{
return (KONTOSTAND);
}
int main()
{
KONTO TESTKONTO;
TESTKONTO.WERT_AENDERUNG(0);
int ALTERNATIVE, WERT=0;
cout << "K O N T O V E R W A L T U N G" << endl;
do {
cout << "1 = KONTOSTAND AENDERN" << endl;
cout << "2 = KONTOSTAND LESEN" << endl;
cout << "0 = Ender der Akton" << endl << endl;
cout << "Ihre Wahl: ";
cin >> ALTERNATIVE;
switch (ALTERNATIVE) {
case 1: cout << "Neuer WERT: ";
cin >> WERT;
if (TESTKONTO.WERT_AENDERUNG(WERT))
cout << "WERT geaendert." << endl << endl;
break;
case 2: cout << "Aktueller WERT: ";
cout << TESTKONTO.KONTOSTAND_LESEN() << endl << endl;
break;
}
} while (ALTERNATIVE != 0);
system("pause");
return 0;
}
Es geht um die Methode WERT_AENDERUNG(int), return gibt ja einen Wert an die Funktion WERT_AENDERUNG(int) zurück. Was bedeutet diese 1 oder die 0 nach return? Und warum die runden Klammern, in der main is ja bei return 0 auf keine Klammer um die 0.
2. Frage: Was genau ist ein Kontruktor, Destruktor? Also jetzt nicht irgendwo copy&paste sondern mit eigenen Worten erklärt.
-
Hey,
int KONTO::WERT_AENDERUNG(int EINGABE)
WERT_AENDERUNG ist vom Typ Integer, d.h. eine Ganzzahl muss zurückgegeben( = Returned ) werden.
In diesem Beispiel wird eine 1 zurückgegeben, wenn es geklappt hat, und eine 0, falls es nicht geklappt hat.
Die Klammern sind Optional.
-
int KONTO::WERT_AENDERUNG(int EINGABE) {
==> es wird ein int (Ganzzahl) zurückgegeben.
Das Argument nach return ist eben der Wert, der zurückgegeben wird. Beim Aufruf der Funktion kann man diese dann ähnlich wie eine Variable in Ausdrücken und Zuweisungen verwenden. Dabei steht der Funktionsaufruf einfach ausgedrückt für den zurückgegebenen Wert.
Mit dem return (0) bzw. return (1) wird halt 0, respektive 1 zurückgegeben.
return ist ein Sprachkonstrukt und keine Funktion o.ä. . Hier sind die Klammern optional - d.h. können, müssen aber nicht geschrieben werden.
Beispiele:
return 0; // ist erlaubt
return (0); // ist auch erlaubt
return ((0)); // ist ebenso erlaubt
return(0); // auch korrekt
P.S.: wieso sind diese Alten Hacker immer schneller?
-
die Funktion überprüft etwas...
sie überprüft, ob Eingabe größer oder gleich 0 ist und kleiner oder gleich 100000 ist.
wenn das der Fall ist, dann gibt sie zurück, andernfalls 0.
Die Klammern sind nicht wichtig, man kann (glaube ich) jeden ausdruck in klammern setzen, (45 + 34) + (33 + 35) ist das selbe wie 45 + 34 + 33 + 35.
In C++ steht 0 für falsch und alles andere für wahr, das ganze kommt aus C, wenn ich micht nicht irre.
Wenn der Benutzer seinen Kontostant ändern möchte, dann gibt er eine Zahl ein, die zwischen 0 und 100000 liegen muss
if (TESTKONTO.WERT_AENDERUNG(WERT)) übrtprft, ob die AENDERUNGs Funktion das zulässt. Wenn die AENDERUNGs FUnktion 1 zurück gibt, dann lief alles reibungslos und cout << "WERT geaendert." << endl << endl; wird ausgeführt.
hoffe das war soweit richtig.
-
In C++ wurde eigentlich ein echter "bool" Typ eingeführt.
Die C-"Machart" mit 0 und 1 ist i.R eher überflüssig und umständlich ;).
Zu der Verwendung: Da C keine Exceptions und andere Fehlerbehandlungsroutinen hatte, hat man sich mit Returnwerten geholfen, um Fehler irgendwie zu registrieren/zu merken.
Z.B findet man in der WinAPI Dokumentation sehr oft den Satz "Rückgabewert: ungleich 0, falls erfolgreich, gleich 0, falls xyz Fehler. Um genauen Fehlercode zu erhalten, rufen Sie GetLastError Funktion auf".
Dieses System hat alledings deutliche Nachteile - man kann damit weder den genauen Fehler signalisieren, noch überall anwenden (z.B hier:
Code:
int KONTO::KONTOSTAND_LESEN()
{
return (KONTOSTAND);
}
würde man mit diesem System nicht prüfen können, ob ein Fehler auftrat oder das Konto ganz "legal" einen 0-Euro Stand hatte. Hier kommen Exceptions ins Spiel - damit kann man die Fehler sowohl direkt "melden" wie auch Abfangen, ohne über Umwege zu gehen.
Auch wenn C++ nicht zu meinen Favoriten gehört: ich würde mir an deiner Stelle aus oben erwähnten Gründen (C-like 0 und 1 statt "true/false", keine Exceptionsnutzung, schlechte Codeformatierung, von Namingconventions ganz zu schweigen - normalerweise werden nur Konstanten großgeschrieben) was anderes zum Lernen suchen ;)
zu Konstruktor/Destruktor:
z.B:
du hast hier eine Klasse KONTO. Das ist quasi der Bauplan, wie eine Konto-Struktur aussieht - und macht an sich erstmal nix. Anders gesagt: die Klasse ist erstmal nichts konkretes, sondern eine Beschreibung für eine Struktur.
Mit KONTO TESTKONTO wird zur Laufzeit eine Instanz der Klasse KONTO erzeugt. Andersgesagt (nicht so abstrakt): es wird ein Object erzeugt, der das in "KONTO" beschriebene Verhalten aufweisen soll == d.h das ist schon etwas konkretes.
Ein Konstruktor ist nun nach Vereinbarung eine Funktion, die bei der Erstellung des Objects mitausgeführt wird. Kannst es ein bisschen mit der Main() Funktion im Code vergleichen. Jedesmal wenn eine Instanz einer Klasse XYZ erstellt wird, wird diese "Konstruktor" Funktion ausgeführt. Darin kann der Programmierer nun alles mögliche machen (sichergehen, dass bestimmte Ressourcen geladen wurden, irgendwelche Variablen initialisieren usw.)
Destruktor ist das Gegenstück zu Konstruktor - wenn ein Object "zerstört" wird, wird quasi nach "Vereinbarung" diese Funktion ausgeführt. Hier sollten im wesentlichen dann Ressourcen/Speicher freigegeben werden.
Such dir einfach ein Beispielcode mit Konstruktor/Destruktor:
http://www.cpp-tutor.de/cpp/le10/ctor_dtor.html
dann sollten einige Fragen sich erledigen.
PS/EDIT: meine Konstruktorbeschreibung ist im Übrigen eher allgemein gehalten und nicht C++ spezifisch (was aber nicht wirklich viel aus machen sollte ;) )