Базовый класс перекрывает методы наследников

akril
Дата: 03.01.2010 14:31:38
Базовый класс:
ref class CVagon{     //Класс вагон - базовый
public:
   //...
   virtual char GetTip() {return 'O';};
   //...
};
Первый наследник
ref class CVagonPas:public CVagon{    //Класс пассажирский вагон
public:
   //...
   char GetTip()new;
   //...
};
Второй наследник
ref class CVagonSlug: public CVagon{  //Класс служебный вагон
public:
   //...
   char GetTip()new;
   //...
};
В общем ясно, что возврат в GetTip() зависит от того какой класс перед нами здесь:
List<CVagon^> Vagons;
В C++ все было верно: хоть и указан базовый класс CVagon, возврат был от нужного наследника (который и пихали в список).
А сейчас бред какой-то, возврат только от предка (CVagon), хотя оный в список вообще не помещается на протяжении программы.
Вопрос: Почему?
Gatman
Дата: 03.01.2010 15:16:42
потому что new не для того нужен
используйте override и читайте документацию
akril
Дата: 03.01.2010 15:25:10
Gatman
потому что new не для того нужен
используйте override и читайте документацию

Спасибо за совет. Он дельный и правильный. Но я читал документацию и пытался сделать так, просто с override вот что:
... error C2217: 'override' requires 'virtual' ...
а советы по исправлению этой ошибки в документации какие-то замысловатые, из них я так и не понял в чем у меня дело и как сделать правильно
akril
Дата: 03.01.2010 16:09:42
Так что, вопрос все еще актуален.
Gatman
Дата: 03.01.2010 16:12:53
ref class CVagonPas:public CVagon{    //Класс пассажирский вагон
public:
   //...
   virtual char GetTip() override;
   //...
};

ref class CVagonSlug: public CVagon{  //Класс служебный вагон
public:
   //...
   virtual char GetTip() override;
   //...
};
akril
Дата: 03.01.2010 16:19:27
Gatman,

Теперь все работает как надо. Спасибо Вас огромное, сам бы я не догадался до такого.

Тема закрыта.