Lieber Morpheus, deine Tutorials begleiten mich schon seit dem 1. Bachelorsemester. Jetzt, 6 Jahre später, und in meiner ersten Anstellung als SW-Ingenieur, bin ich wieder hier. Danke und weiter so!
gut erklärt gute qualität sowie sound als auch bild, hast ne motivierende stimme, nicht so wie die anderen die sich anhören als würden sie grade einschlafen
sehr nice! hat mir sehr weitergeholfen und die erklärung der pointer hilft einem gut fürs verständnis ! (zumindest mir ^^) vorallem ist ja sowas für games mit items etc mega wichtig (ja etwas nerdy aber hey :D) Danke fürs video :) !
ich habe eine Methode mit struct geschrieben aber das meckert immer. Bruch add (Bruch Bruch1, Bruch Bruch2 )// der Prototyp ist so vorgegeben worden { // ich habe folgendes verfahren Bruch Resultat; Resultat = Bruch1 + Bruch2; return Resultat;} ich muss eine Variable mit dem Datentyp Bruch deklarieren und die Summe meiner beiden Brüche speichern und zurückgeben. ich hatte zwei Instanzen int Nenner , Zaehler deklariert.
Danke :) vermutlich ist auf der Operator + nicht definiert. Ich nehme mal an, du hast für die Brüche 2 Attribute Nenner und Zaehler? Dann kannst du einfach Bruch1.zaehler + Bruch2.zaehler und Bruch1.nenner + Bruch2.nenner rechnen und die Ergebnisse dann in einen Konstruktor des Typs Bruch übergeben, was dir einen neuen Bruch liefert. Diesen kannst du dann als Ergebnis zurückgeben :)
Kann es sein, das mitlerweile die Konstruktoren bei vererbung übernommen werden? Bei mir (Visual Studio 2019) funktioniert es. Das überladen der Operatoren wird nicht übernommen.
Wenn du eine Instanz aus Hunde-Klasse in einer Instanz aus Tier-Klasse speicherst, wird natürlich die Methode, die durch Hund-Klasse überschrieben wurde, nicht übernommen. Weil man ja in dieser Methode eventuell Member hat, die nur in der Hund-Klasse vorhanden sind. Also das hat schon Sinn. Und am Ende zeigst du dass das durch einen Pointer gelöst wird. Ich glaube aber da hat man nicht mehr mit der Klasse "Tier" zu tun. weil die Instanz "abc" einfach die Adresse der bereits erstellten Instanz von "ace" ist. "abc->wieMachtDasTier()" ist meiner Meinung nach gleich "ace.wieMachtDasTier()"
Ja in dem Fall verweist abc nur auf ace. Aber ohne das virtual würde der Compiler dennoch die Funktion der Basisklasse übernehmen. Es ist also schon sinnvoll. Wichtig wird es wenn man einen Vector aus Tieren hat. Man hätte dann sowas std::vector tiere; tiere.push_back(new Katze()); tiere.push_back(new Hund()); Dann ist es schon hilfreich, da man ohne den typecast zurück auf die eigentliche Klase die abgeänderte Funktion dieser Klasse nutzen kann. Also könnte ich einfach wieMachtDasTier() für jedes Element des Vektors aufrufen und würde die richtige Ausgabe erhalten.
Diese Zeile weist name = newname zu. Normalerweise würde man das in den geschweiften Klammern tun {}. Sobald ein Objekt aber erstellt wird, muss für jede Membervariable in dem Objekt Speicher reserviert werden. Um direkt bei der Erstellung der Variable name den Wert newname zuzuweisen und nicht erst nach der Erstellung wie es in {} der Fall wäre, gibt es diese besonderen Doppelpunkte. Es ist also einfach effizienter als die Zuweisung in {} zu machen, dies geht aber genauso.
Lieber Morpheus,
deine Tutorials begleiten mich schon seit dem 1. Bachelorsemester. Jetzt, 6 Jahre später, und in meiner ersten Anstellung als SW-Ingenieur, bin ich wieder hier. Danke und weiter so!
gut erklärt gute qualität sowie sound als auch bild, hast ne motivierende stimme, nicht so wie die anderen die sich anhören als würden sie grade einschlafen
vielen Dank :)
4:47 Wenn Morpheus an seine Freundin will, aber sie nicht möchte
😜
echt so toll erklärt. mach bitte weiter so
Sehr hilfreiches Tutorial!
sehr nice!
hat mir sehr weitergeholfen und die erklärung der pointer hilft einem gut fürs verständnis ! (zumindest mir ^^)
vorallem ist ja sowas für games mit items etc mega wichtig (ja etwas nerdy aber hey :D)
Danke fürs video :) !
wer kennt sie nicht? Die LEGENDÄRE Katze namens hund!!!
wenn ich ne Katze hab nenn ich sie echt mal Hund :D
Sie erklären super gut! !!!! Danke
ich habe eine Methode mit struct geschrieben aber das meckert immer.
Bruch add (Bruch Bruch1, Bruch Bruch2 )// der Prototyp ist so vorgegeben worden {
// ich habe folgendes verfahren
Bruch Resultat;
Resultat = Bruch1 + Bruch2;
return Resultat;}
ich muss eine Variable mit dem Datentyp Bruch deklarieren und die Summe meiner beiden Brüche speichern und zurückgeben.
ich hatte zwei Instanzen int Nenner , Zaehler deklariert.
Danke :)
vermutlich ist auf der Operator + nicht definiert.
Ich nehme mal an, du hast für die Brüche 2 Attribute Nenner und Zaehler?
Dann kannst du einfach Bruch1.zaehler + Bruch2.zaehler und Bruch1.nenner + Bruch2.nenner rechnen und die Ergebnisse dann in einen Konstruktor des Typs Bruch übergeben, was dir einen neuen Bruch liefert.
Diesen kannst du dann als Ergebnis zurückgeben :)
Danke, hast mir wirklich geholfen! :)
freut mich sehr :)
Kann es sein, das mitlerweile die Konstruktoren bei vererbung übernommen werden?
Bei mir (Visual Studio 2019) funktioniert es.
Das überladen der Operatoren wird nicht übernommen.
Danke
Danke fürs Zusehen :)
Wenn du eine Instanz aus Hunde-Klasse in einer Instanz aus Tier-Klasse speicherst, wird natürlich die Methode, die durch Hund-Klasse überschrieben wurde, nicht übernommen. Weil man ja in dieser Methode eventuell Member hat, die nur in der Hund-Klasse vorhanden sind. Also das hat schon Sinn. Und am Ende zeigst du dass das durch einen Pointer gelöst wird. Ich glaube aber da hat man nicht mehr mit der Klasse "Tier" zu tun. weil die Instanz "abc" einfach die Adresse der bereits erstellten Instanz von "ace" ist. "abc->wieMachtDasTier()" ist meiner Meinung nach gleich "ace.wieMachtDasTier()"
Ja in dem Fall verweist abc nur auf ace. Aber ohne das virtual würde der Compiler dennoch die Funktion der Basisklasse übernehmen. Es ist also schon sinnvoll.
Wichtig wird es wenn man einen Vector aus Tieren hat. Man hätte dann sowas
std::vector tiere;
tiere.push_back(new Katze());
tiere.push_back(new Hund());
Dann ist es schon hilfreich, da man ohne den typecast zurück auf die eigentliche Klase die abgeänderte Funktion dieser Klasse nutzen kann. Also könnte ich einfach wieMachtDasTier() für jedes Element des Vektors aufrufen und würde die richtige Ausgabe erhalten.
Na, also das bei Minute 3:45 würde ich nicht so machen mit dem überschreiben. Ich würde es vielleicht mit Parametern machen.
Wäre vermutlich sinnvoller, ja
Könnte mir jemand erklären, was genau die Zeile
Hund(string newname):name(newname){}
ausführt?
Vielen Dank für deine Videos :)
Diese Zeile weist name = newname zu. Normalerweise würde man das in den geschweiften Klammern tun {}. Sobald ein Objekt aber erstellt wird, muss für jede Membervariable in dem Objekt Speicher reserviert werden. Um direkt bei der Erstellung der Variable name den Wert newname zuzuweisen und nicht erst nach der Erstellung wie es in {} der Fall wäre, gibt es diese besonderen Doppelpunkte. Es ist also einfach effizienter als die Zuweisung in {} zu machen, dies geht aber genauso.
TheMorpheusTutorials, konvertiert Biber zu Hunden...
Und Hunde zu Katzen 🙈