Пропадают методы???
От: Lexaux Украина  
Дата: 19.06.06 23:51
Оценка:
Здравствуйте, други.
Возникла проблема следующего характера:
при реализации иерархии числовых множеств (Коплексные-Действительный-Целые числа) необходимо было выполнять арифметические действия так, чтобы результат имел тип большего из аргументов.
Мной была избрана следующая тактика — поскольку действия над комплексными числами являются наиболе общими, то класс Complex становится базовым.
От него наследуют "сужающие" множества.
Перегруженные операторы присутствуют во всех классах только для своего уровня, т.е. расширение мы получаем за счет того что класс-сужение является потомком. примерно вот такое код:


// Base class for the numbers
class Complex
{
...
public:
    // operators
    Complex& operator+ (Complex& cmplx){...};
    Complex& operator- (Complex& cmplx);
    Complex& operator* (Complex& cmplx);
    Complex& operator/ (Complex& cmplx);

...

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

};



// Real numbers class
class Real : public Complex
{
...
public:
     Real& operator+(Real& value){...};
...

};

А вопрос вот в чем — при попытке потом выполнить такую вот конструкцию —

Complex с(1,2);
Real r(2);
Complex a = c+r;

Все работает. Но если мы ПОМЕНЯЕМ слагаемые местами — перестает. Вот так:
Complex с(1,2);
Real r(2);
Complex a = r+с;

Ошибка при компиляции — "не могу привести тип Complex к типу Real"... То есть оно вызывает новый метод и в упор не видит унаследованного...
Вот...
Я видимо чего то не знаю, я понимал что это 2 разных метода (у них даже сигнатура разная!!!)
Подскажете в чем трабла???
если охота письмо — lexaux(DOG-WOOF-WOOF)gmail.com
СПаСИБО!
------
[ -- the only way out is the way up -- ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.