Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
#1

Как вызвать метод объекта из контейнера? - C++

18.03.2012, 16:57. Просмотров 644. Ответов 2
Метки нет (Все метки)

Есть абстрактный класс E, производный от CObject, в нем чистая виртуальная войдовская функция. Создал динамические объекты классов, которые являются производными от нашего абстрактного класса E и засунул их в контейнер CO/blist, как теперь запустить войдовскую функцию объекта любого?
Например,
CO/blist container;
container.AddHead( динамическиий объект );
Как теперь вызвать его метод?
POSITION pos;
pos = container.GetHeadPosition();
E * pE = container.GetAt ( pos ); (чтобы потом pE->вызов ф-ии) не работает.

Добавлено через 2 часа 20 минут
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2012, 16:57     Как вызвать метод объекта из контейнера?
Посмотрите здесь:
Как вызвать прегруженный const метод для статического объекта C++
C++ Как по требованию вызвать дескриптора объекта?
C++ Как вызвать конструктор для неизвестного объекта?
C++ Удаление объекта из контейнера
C++ Как вызвать метод класса?
Как вызвать из метода метод? C++
C++ Как вызвать другой конструктор для уже созданного объекта конструктором по умолчанию?
Удаление объекта класса из контейнера C++
C++ Как вызвать метод для for_each?
C++ Как вызвать метод родительского класса;
Как вызвать метод вектора из динамического массива? C++
C++ Как вызвать метод одного класса в другом?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.03.2012, 17:04     Как вызвать метод объекта из контейнера? #2
не работает - это не компилируется чтоли?
я так понял контейнер не типизированный. хранит указатели на объекты, которые производные от CObject. Раз так, то тут без преобразований неполучится сделать. Сперва нужно из контейнера достать указатель на нужный объект (его тип будет CObject*), потом скастить этот указатель в указатель на E и потом уже у этого указателя на E звать нужную функцию. Кастить можно либо статик кастом, либо с проверкой (т.е. dynamic_cast).
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
18.03.2012, 17:46  [ТС]     Как вызвать метод объекта из контейнера? #3
сейчас скомпилировал и получил:
'=' : cannot convert from 'CObject *' to 'E *'
Cast from base to derived requires dynamic_cast or static_cast

Вообщем вы правы, значит, то что класс E производный от CObject ничего не дает(((

Добавлено через 15 минут
вообщем с помощью dynamic_cast проблему решил) Большое спасибо)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru