[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 longbzw.__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 à laclass 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