Re: Пропадают методы???
От: _Dreamer Россия  
Дата: 20.06.06 01:57
Оценка:
Здравствуйте, Lexaux, Вы писали:

L>
L>// Base class for the numbers
L>class Complex
L>{
L>...
L>public:
L>    // operators
L>    virtual Complex/* & */ operator+ (const Complex& cmplx){ return Complex( real + cmplx.real, imag + cmplx.imag ) };
L>    virtual Complex/* & */ operator- (const Complex& cmplx);
L>    virtual Complex/* & */ operator* (const Complex& cmplx);
L>    virtual Complex/* & */ operator/ (const Complex& cmplx);

L>...

L>protected:
L>    // Complex fields
L>    float real;
L>    float imag;
L>...

L>};



L>// Real numbers class
L>class Real : public Complex
L>{
L>...
L>public:
L>     using complex::operator+;
L>     Real/* & */ operator+(const Real& value){...};
L>...

L>};
L>


при этих исправления следующий код работает —

Complex c1( 1.0f, 2.0f );
Real r1( 3.0f ), r2(4.0f);

Real r3 = r1 + r2;
Complex c2 = c1 + r2;


либо можно так —

class Complex
{
public :
    Complex( float r_, float i_ ) : r( r_ ), i( i_ ) {}

    friend Complex operator + ( const Complex& lhs, const Complex& rhs );

protected :
    float r, i;
};

class Real : public Complex
{
public :
    Real( float val ) : Complex( val, 0.0f ) {}

    friend Real operator + ( const Real& lhs, const Real& rhs );
};

Complex operator + ( const Complex& lhs, const Complex& rhs )
{
    return Complex( lhs.r + rhs.r, lhs.i + rhs.i );
}

Real operator + ( const Real& lhs, const Real& rhs )
{
    return Real( lhs.r + rhs.r );
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.