Посмотрите на этот код:
#include <cmath>
#include <iostream>
using namespace std;
class Sphere
{
double r;
public:
double V() const { return (4/3) * 3.14 * pow(r,3); }
bool equal(const Sphere& s) const
{
cout << V() << " == " << s.V() << " : " << ( V() == s.V() );
return ( V() == s.V() );
}
explicit Sphere(double rr = 1): r(rr){}
};
main()
{
Sphere s(3);
s.equal(s);
}
Вывод 84.78 == 84.78 : 0
означает, что один и тот же метод не возвращает одно и то же значение каждый раз, хотя все параметры являются статическими?
Но если я пишу 3.0
вместо 3.14
в определении метода V()
, например:
double V() const { return (4/3) * 3.0 * pow(r,3); }
Затем вывод: 84.78 == 84.78 : 1
Что здесь происходит? Мне нужен этот метод, для моей программы, который будет сравнивать объемы двух объектов, но это невозможно? Я так долго ударил головой, чтобы выяснить, в чем причина проблемы, и, к счастью, я ее нашел, но теперь я не понимаю, почему? Имеет ли это какое-то отношение к компилятору (GCC), или я пропустил что-то важное здесь?