Zuweisung von Objekten
-
Hallo alle zusammen,
xobj_1.m = xobj_1.m || xobj_2.m;
Ich bin mir bei dieser Zuweisung echt nicht sicher was da abgeht...
So sieht der ganze Code aus,
#include <iostream> using namespace std; class X{ static int n; public: int m; X(int mm){ m = mm; } static int getn(){ return n; } static void setn(int nn){ n = nn++; } }; int X::n = 100; int main() { X xobj_1(20); X xobj_2(40); X::setn(1111); xobj_1.m = xobj_1.m || xobj_2.m; cout << xobj_1.m << " " << xobj_1.getn() << endl; cout << xobj_2.m << " " << xobj_2.getn() << endl; return 0; }
-
Wundert dich die 1 in der Ausgabe? Welches Ergebnis hättest du denn erwartet?
-
Da geht genau das ab was da steht. Was ist deine Frage?
Wasa || b
bedeutet? Das kannst du in jedem C++ Lehrbuch bzw. auch in jeder Online-Referenz nachgucken (unter "Operatoren").
-
MFK schrieb:
Wundert dich die 1 in der Ausgabe? Welches Ergebnis hättest du denn erwartet?
Ja... Ich hätte die 20 erwartet...
-
Weil du meinst dass
||
in C++ das selbe ist wie??
in C# oder warum?
Du kannst nicht einfach irgendwelche "wäre cool wenn das das machen würde" Regeln erfinden und dann erwarten dass der Code funktioniert.
C++ macht das was C++ für richtig hält, nicht das was du dir irgendwie vorgestellt hast.
-
mrv3112 schrieb:
Ja... Ich hätte die 20 erwartet...
Das tut || aber nicht. || nimmt zwei bool-Operanden, und gibt true zurück, wenn mindestens einer von beiden true ist. Zunächst werden also deine int-Operanden in bool umgewandelt. Dabei wird 0 zu false, alles andere zu true. Da du das Ergebnis wieder einem int zuweist, wird wieder zurückgewandelt. true ergibt 1, false 0.
-
warum soll bei
int x = 20 || 40
20 rauskommen? weil 20 kleiner ist - oder näher bei 0 oder wie kommst du darauf?
-
hustbaer schrieb:
Weil du meinst dass
||
in C++ das selbe ist wie??
in C# oder warum?Komisch, wenn ich versuche das ganze mittels "??" in C# umzusetzen passiert nix außer dass ich einen Compiler-Fehler bekomme weil "??" nicht auf 2 Operanden vom Typ int angewendet werden kann. Die andere Variante mit "||" schlägt natürlich aus gleichem Grund fehl.
-
Man müsste natürlich
int?
verwenden.
-
Ok, kannte ich noch nicht. Der Sinn will sich mir auch noch nicht so recht erschließen. Aber das steht ja auf einem anderen Blatt Papier.
-
MFK schrieb:
Das tut || aber nicht. || nimmt zwei bool-Operanden, und gibt true zurück, wenn mindestens einer von beiden true ist. Zunächst werden also deine int-Operanden in bool umgewandelt. Dabei wird 0 zu false, alles andere zu true. Da du das Ergebnis wieder einem int zuweist, wird wieder zurückgewandelt. true ergibt 1, false 0.
Verstanden, danke dir