Gibt es eine Standard-Klasse 'int' in C ++?

7

Gibt es eine (mehr oder weniger) Standard-Int-Klasse für C ++?

Wenn nicht, ist es für C ++ 13 geplant und wenn nicht, gibt es dafür besondere Gründe?

Der OOP-Entwurf würde davon profitieren. Ich denke, es wäre zum Beispiel schön, einen Zuweisungsoperator in einer benutzerdefinierten Klasse zu haben, der ein int zurückgibt:

%Vor%

und nicht

%Vor%

OK, es gibt viele Beispiele, wo es nützlich sein könnte, warum existiert es nicht (wenn nicht)?

Es ist für Koppelnavigation und andere Lag-kompensierende Systeme und die Behandlung dieser Werte als "normale" Variablen wird nett sein, hoffentlich trotzdem!.

    
Valmond 06.03.2012, 15:58
quelle

9 Antworten

19
  

es wäre nett, einen Zuweisungsoperator in einer benutzerdefinierten Klasse zu haben, die ein int

zurückgibt

Sie können das mit einem Konvertierungsoperator tun:

%Vor%

Dies sollte normalerweise vermieden werden, da die zusätzlichen impliziten Konvertierungen Mehrdeutigkeiten verursachen oder Kategoriefehler verbergen können, die andernfalls vom Typsystem erfasst würden. In C ++ 11 können Sie die implizite Konvertierung verhindern, indem Sie den Operator explicit ; dann kann die Klasse verwendet werden, um den Zieltyp zu initialisieren, wird aber nicht implizit konvertiert:

%Vor%     
Mike Seymour 06.03.2012, 16:01
quelle
5

Wenn Sie möchten, dass Ihre Klasse implizit in int konvertiert wird, können Sie einen impliziten Konvertierungsoperator ( operator int() ) verwenden, aber im Allgemeinen verursachen implizite Konvertierungen mehr Probleme und Debugging, als sie in der Benutzerfreundlichkeit lösen / p>     

Mark B 06.03.2012 16:01
quelle
3

Wenn Ihre Klasse ein int modelliert, dann ist die von anderen Antworten präsentierte Lösung des Konvertierungsoperators in Ordnung. Was aber macht Ihr myclass Modell?

Was bedeutet , um eine ganze Zahl daraus zu erhalten?

Daran sollten Sie denken, und dann sollten Sie zu dem Schluss kommen, dass es höchstwahrscheinlich bedeutungslos ist, eine ganze Zahl ohne jegliche Information zu erhalten, was sie darstellt.

Nimm std::vector<T>::size() als Beispiel. Es gibt eine Ganzzahl zurück. Sollte std::vector<T> aus diesem Grund in eine ganze Zahl umgewandelt werden? Ich denke nicht. Sollte die Methode getInt() heißen? Auch das glaube ich nicht. Was erwartest du von einer Methode namens getInt() ? Aus dem Namen allein erfahren Sie nichts über was es zurückgibt. Es ist auch nicht die einzige Methode, die eine ganze Zahl zurückgibt, es gibt auch capacity() .

    
Xeo 06.03.2012 16:12
quelle
2

Implementieren Sie den Operator int () für Ihre Klasse

    
knivil 06.03.2012 16:05
quelle
1

Dies kann durch den Operator cast realisiert werden. ZB:

%Vor%     
Constantinius 06.03.2012 16:01
quelle
1

Nein, es gibt keine standardmäßige int-Klasse. Für Dinge wie BigDecimal können Sie sich ansehen. Gibt es ein C ++ -Äquivalent zu Java's BigDecimal?

Wie für int, wenn Sie es wirklich brauchen, können Sie Ihre eigenen erstellen. Ich bin nie auf eine Instanz gestoßen, wo ich eine Integer-Klasse brauchte.

    
Sid 06.03.2012 16:02
quelle
1

Nein, und es wird keine geben. Was Sie tun möchten, können Sie mit dem Konvertierungsoperator tun:

%Vor%     
Cat Plus Plus 06.03.2012 16:02
quelle
1

Nein, und es wird wahrscheinlich nicht sein.

%Vor%

Dies wird von Konvertierungsoperatoren abgedeckt:

%Vor%

Nicht alles muss "objektorientiert" sein. C ++ bietet andere Optionen.

    
bames53 06.03.2012 16:02
quelle
0

Es gibt keinen Grund, einen zu haben, und deshalb wird es keinen geben.

    
Puppy 06.03.2012 16:03
quelle

Tags und Links