S> S>при вызове ...
S>CSMTrinity SMTrinity; S>CSxTrinity SxTrinity;
S>SMTrinity.SM_Compare(SxTrinity);
S>дает ошибку что не может преобразовать тип СSxTrinity& к СSMTrinity&. Почему не вызывается функция базового класса? Спасибо....
Насколько я понимаю можно SxTrinity.SM_Compare(SMTrinity);, но не наоборот, так как объект родительского класса нельзя преобразовать к объекту класса наследника, а наоборот можно.
Сергей.
Re: Перегрузка функций в классе наследнике
От:
Аноним
Дата:
20.12.02 12:46
Оценка:
Потому как функуия, переопределенная в самом последнем твоем классе, принимает ссылку на объект этого же класса, а ты даешь обект базового класса.
Можно использовать static_cast, но только при условии, что ссылка, которую ты будешь преобразовывать, в действительности ссылается на CSMTrinity
Name hiding ("сокрытие имён" — ты найдёшь много веток обсуждающих это явление).
Объявление в производном классе метода с именем, которое используется
для методов базового класса, скрывает все эти методы базового класса.
Таковы правила С++. Ничего не попишешь...
Здравствуйте, Sablezub, Вы писали:
S>есть два класса
S>class CSMTrinity: public CSxTrinity S>{ S>public: S> CSMTrinity(); S> virtual ~CSMTrinity();
S> using CSxTrinity::SM_Compare;
double SM_Compare(CSMTrinity& SMTrinity);
S>}; S>[/code]
этим ты введешь функцию из базового класса в область имен производного, и тогда в этой области имен будет 2 одинаковых имени и для них будет действовать перегрузка.