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?
    Was a || 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 👍


Anmelden zum Antworten