[Anfänger] Startschwierigkeiten mit eigener "BigNum" Klasse



  • Hallo,
    Ich habe vor Kurzem angefangen, mich mit Klassen zu beschäftigen. Daher kann ich außer "Auto Klassen" nicht viel 😃
    Zur Übung wollte ich jetzt eine Klasse schreiben, die mit sehr großen Zahlen rechnen kann. Später sollen dann zB. auch die Operatoren überladen werden, damit man mit der Klasse wie mit den integrierten Typen rechnen kann.
    Das ganze soll im Prinzip so ablaufen, dass die Zahlen in arrays bzw. Vectoren gespeichert werden, zB:

    bignum=12345;
    ist dann gleichbedeutend mit
    unsigned short arr[5] = { 1,2,3,4,5} ;
    

    Das erste Problem ergibt sich jetzt bei der initialisierung von bignum.
    Im Moment lese ich den Wert von bignum als string ein

    #include <string>
    
    class bignum
    {
       private:
        std::string number;
    
       public:
        bignum ( const char* zahl)
        {
            number=zahl;
        }
    };
    
    int main()
    {
        bignum b="10000000000000000000000000";
        return 0;
    }
    


    Allerdings muss der Benutzer ja dann immer die Anführungszeichen mitschreiben.

    Kann man den Konstruktor auch so umschreiben, dass der Benutzer - wie bei den integrierten Typen - den Wert von bignum ohne Anführungszeichen schreiben kann? zB:

    bignum=100000000000000000000;
    


  • Wenn es gehen würde, dann wäre die Zahl ja von einem bereits 'integrierten' Datentyp...



  • bignum schrieb:

    Kann man den Konstruktor auch so umschreiben, dass der Benutzer - wie bei den integrierten Typen - den Wert von bignum ohne Anführungszeichen schreiben kann? zB:

    bignum=100000000000000000000;
    

    nein, das geht nicht.



  • ok, schade
    dann bleib ich bei den strings



  • Auch wenn man mich jetzt dafür steinigen wird, möchte ich die Möglichkeit doch noch erwähnt haben. 😉

    Du kannst die Anführungszeichen weglassen, indem du zu Makros greifst (dafür kommen halt Klammern an die Stelle):

    #define BIGNUM(VAR) #VAR
    
    bignum a = BIGNUM(242352352234112312321455323);
    

    Intern funktioniert das ganze trotzdem mit Strings, der #-Operator macht einen String aus der Zahl. Sehr sauber ist es wie angetönt nicht, aber wenn die Anführungszeichen so schlimm für dich sind... 🙂

    P.S. Dein Ansatz für eine grosse Klasse ist zwar gut, um neue Dinge wie Operatorüberladung zu lernen, aber damit wirklich arbeiten solltest du vielleicht besser nicht. Es gibt unter gewissen Systemen auch den 64-Bit-Datentyp long long bzw. __int64 , ansonsten gibt es einige Bibliotheken für sehr grosse Integer.



  • Auf Performance/Nutzbarkeit kommt es wirklich nicht an 🙂 Ich habs nur satt, ständig mit Klassen à la

    class auto
    {
       int tueren;
       int PS;
       //usw
    };
    

    zu arbeiten. Und dass man die Zahlen mit Anführungszeichen eingibt stört mich nicht wirklich. Ich dachte, vielleicht gibts nen (unkomplizieren/sauberen) Weg, das ganze ohne zu machen.
    Aber das ist echt ne gute Übung! Im Moment funktioniert schon Addition und Pre/Post Incrementation 😃


Anmelden zum Antworten