3 Stimmen

Wie kann ich eine Klasse den Primitiven zuordnen? Oder, wie mache ich eine skalare Klasse?

Ich habe mich gefragt, ob es möglich ist, meine

class Time
{
    public:
        Time();

        explicit
        Time(
            const double& d);

        Time&
        operator=(
            const Time& time);

        Time&
        operator=(
            const double& d);
};

dem primitiven Double zugewiesen werden?

Ich verwende Time oft als IV und muss viele skalare Operationen damit durchführen, also muss es sich mit DVs "vermischen", die normalerweise gewöhnliche Doubles sind. Das Hinzufügen eines zweiten Zuweisungsoperators hat den Trick in die andere Richtung gebracht.

Viele Operationen sind damit aber immer noch nicht möglich. Ich habe Operatoren außerhalb der Klasse Time geschrieben, um Addition, Subtraktion, Multiplikation und Division zwischen Time und double zu ermöglichen. Da aber Zuweisungsoperatoren außerhalb einer Klasse nicht erlaubt sind, kann ich diesen letzten Fehler nicht beheben:

Error   1   error C2440: 'initializing' : cannot convert from 'double' to 'Time'    linearfit.cpp   67

Hat jemand Erfahrung damit?

Danke!

5voto

flolo Punkte 14497

Sie müssen einen Operator schreiben/überschreiben. In diesem Fall der cast-Operator. Definieren Sie eine Methode

operator double() { return double_however_computed_from_your_time; };

3voto

Alexander Gessler Punkte 44223

Sie sollten Folgendes angeben operator double () const zu machen Time umwandelbar in double . Es gibt keine Möglichkeit, den Zuweisungsoperator für primitive Typen zu überladen.

3voto

Jerry Coffin Punkte 452852

Es scheint wahrscheinlich, dass der von Ihnen angeführte Fehler dadurch entsteht, dass Sie Ihre Time(const double &d) comme explicit . Entfernen Sie die explizite und implizite Konvertierung von double a Time sollte funktionieren (mit der Einschränkung, dass dies auch zu Zeiten geschehen kann, in denen Sie es lieber nicht hätten). Ich würde wahrscheinlich auch die doppelte durch Wert statt const Referenz übergeben.

Die Umrechnung von Time in Double würde mit erfolgen:

class Time { 
// ...
     operator double() const;
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X