Здравствуйте, 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 );
}