| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Как корректно использовать virtual функции в C++ ? |
| Автор: Nendis 23.2.2013, 12:09 |
| Есть класс: class A { public: virtual string print() {cout << "A"}; } и class B : public A { public: virtual string print() {cout << "B"}; } Я создаю коллекцию-вектор: vector<A> mylst; далее заполняю ее след образом: mylst[0] = A(); mylst[1] = B(); При обращении в цикле к каждому елементу и вызову функции Print() всегда печатаеться сообщение "A" как исправить - что бы печаталось сначала "А" а потом "В" ? |
| Автор: NoviceF 23.2.2013, 13:17 |
| Так как вектор принимает объекты по значению, происходит срезка и в векторе конструируются только объекты А. Если нужен полиморфизм, то нужно использовать указатели или ссылки. |
| Автор: Nendis 23.2.2013, 13:21 |
| Спасибо за ответ. Не могли бы привести мне пример объявления коллекции с поддержкой такого полиромфизма. Если честно, в указателях не силен, а пример в интернете подбной реализации затрудняюсь найти. |
| Автор: maxim1000 23.2.2013, 14:23 | ||
например, так
|
| Автор: NoviceF 23.2.2013, 14:31 | ||
Ну для полноты картины
http://liveworkspace.org/code/3ijTV2$13 |
| Автор: VSB 23.2.2013, 23:43 | ||
NoviceF, ну уж если по-правильному, то так
http://liveworkspace.org/code/1Xz9lx$1 |