以下C ++类有什么问题?

时间:2014-04-22 13:56:54

标签: c++ floating-point g++

所以,基本上我创建了一个Float类来跟踪程序中使用的浮点值的范围。我只是用float替换程序中的Float。但是,当我使用这个类时,我的程序输出会改变,但我无法弄清楚问题出在哪里。

#define real float

class Float
{
private:
real data;
static real minVal;
static real maxVal;

static void updateMinMax( real x )
{
    if ( x < minVal )
        minVal = x;

    if ( x > maxVal )
        maxVal = x;
}

public:
static real getMin() 
{
    return minVal;
}

static real getMax() 
{
    return maxVal;
}

Float()
{
    data = 0;
}

Float(real x) 
{
    data = x;
    updateMinMax(data);
}

void setFloat( real x )
{
    data = x;
    updateMinMax(data);
}

void setMaxOf( real x, real y )
{
    data = (x > y)? x : y;
    updateMinMax(data);
}

void setInt( int x )
{
    data = x;
    updateMinMax(data);
}

real getFloat() const
{
    return data;
}

operator int() const { return (int)data; }

void operator=(Float x)
{
    data = x.data;
    updateMinMax( data );
}

Float operator+(const Float& x) const
{
    updateMinMax( data + x.data );
    return Float(data + x.data);
}

void operator+=(Float x)
{
    data += x.data;
    updateMinMax( data );
}

Float operator-(const Float& x) const
{
    updateMinMax( data - x.data );
    return Float(data - x.data);
}

Float operator-() const
{
    updateMinMax( -data );
    return Float(-data);
}

void operator-=(Float x) 
{
    data -= x.data;
    updateMinMax( data );
}

Float operator*(const Float& x) const
{
    updateMinMax( data * x.data );
    return Float(data * x.data);
}

void operator*=(Float x) 
{
    data *= x.data;
    updateMinMax( data );
}

Float operator/(const Float& x) const
{
    updateMinMax( data / x.data );
    return Float(data / x.data);
}

void operator/=(Float x)
{
    data /= x.data;
    updateMinMax( data );
}

bool operator<(const Float& x) const
{
    return data < x.data;
}

bool operator<=(const Float& x) const
{
    return data <= x.data;
}

bool operator>(const Float& x) const
{
    return data > x.data;
}

bool operator>=(const Float& x) const
{
    return data >= x.data;
}

bool operator==(const Float& x) const
{
    return data == x.data;
}

friend ostream& operator<<(ostream& o, Float& x)
{
        o << x.data;
        return o;
}

friend istream& operator>>(istream& i, Float& x)
{
        i >> x.data;
        return i;
} 
};

1 个答案:

答案 0 :(得分:3)

以下测试程序演示了使用float和Float类之间的至少一个区别:

void test(float x)
{
    cout<<"Called with float argument"<<endl;
}
void test(int x)
{
    cout<<"Called with int argument"<<endl;
}

int main() {
    Float arg1;
    float arg2;
    test(arg1);
    test(arg2);
    return 0;
}

输出:

Called with int argument
Called with float argument
相关问题