Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Operator dodawania wartości z dwóch klas zwraca błędną wartość.

Ostatnio zmodyfikowano 2017-11-24 14:25
Autor Wiadomość
Qba777
Temat założony przez niniejszego użytkownika
Operator dodawania wartości z dwóch klas zwraca błędną wartość.
» 2017-11-19 17:21:14
Mógłby ktoś rzucić okiem i dać podpowiedź dlaczego zwraca złą wartość.
Chodzi o to, że chce dodać terperaturę w C i w Kelvinach, ale operator nie przelicza kelvinów, tylko dodaje 1 do 1. Zachowuje się dokładnie jak operator dla dodawania w temp C.

C/C++
#include "Celsius.h"
#include "Kelvin.h"

Celsius::operator Kelvin()
{
    return Kelvin( value + 273.15 );
}

Celsius Celsius::operator +( const Celsius & r_celsius )
{
    return Celsius( value + r_celsius.value );
}

Celsius Celsius::operator -( const Celsius & r_celsius )
{
    return Celsius( value - r_celsius.value );
}

Celsius & Celsius::operator =( const Celsius & r_celsius )
{
    value = r_celsius.value;
    return * this;
}

Celsius Celsius::operator +( const Kelvin & r_kelvin )
{
    return Celsius( * this + static_cast < Celsius >( r_kelvin.value ) );
   
}

Celsius Celsius::operator -( const Kelvin & r_kelvin )
{
    return Celsius( * this - static_cast < Celsius >( r_kelvin.value ) );
}

Celsius & Celsius::operator =( const Kelvin & r_kelvin )
{
   
    value = static_cast < Celsius >(( r_kelvin ).value ).value;
    return * this;
}
P-166978
pekfos
» 2017-11-19 17:58:43
C/C++
return Celsius( * this + static_cast < Celsius >( r_kelvin.value ) );
C/C++
return * this + static_cast < Celsius >( r_kelvin );
P-166981
Qba777
Temat założony przez niniejszego użytkownika
» 2017-11-19 19:32:09
Po zmianie wyrzuca mi błąd, "static_cast": nie można konwertować z "const Kelvin" na "Celsius"
Czyli muszę napisać jeszcze jakiś operator konwertujący "Kelvin na Celsius"?
P-166984
pekfos
» 2017-11-19 20:02:30
Większość tych operatorów powinna być const.
P-166985
Qba777
Temat założony przez niniejszego użytkownika
» 2017-11-19 20:54:58
Czyli powinno wyglądać tak:

C/C++
const Celsius operator +( const Kelvin & );


Celsius Celsius::operator +( const Kelvin & r_kelvin ) const
{
    return( * this + static_cast < Celsius >( r_kelvin ) );
}


Po dwóch dniach już nie mam pomysłów, może jak odpocznę to coś ogarne :D
P-166989
kmlkamilek
» 2017-11-24 14:25:23
Jeśli definiujesz stałą metodę, to jej w klasie również powinna zostać zadeklarowana jako stała.
P-167145
« 1 »
  Strona 1 z 1