The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"vector + полиморфизм"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"vector + полиморфизм"  
Сообщение от primus on 29-Май-07, 21:49 
Есть прибл. такой код


class parent
{
   public:
   ......
   virtual string someFunc(string){...};
   ......
};

class child : public parent
{
   public:
   string someFunc(string){...};
}

main()
{
   vector<parent> vp;
   vp.push_back(child());
   vp.push_back(child());
   .....................
   vector<parent>::iterator it;
   for(it = vp.begin(); it != vp.end(); it++)
      it->someFunc();
}

в цикле вызывается функция parent::someFunc(), а хотелось бы child::someFunc.
Если использовать обычный массив, то все идет нормально.
Что я не так думаю про векторы, итераторы...?

Спасибо.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "vector + полиморфизм"  
Сообщение от Niam (??) on 29-Май-07, 23:24 
>Есть прибл. такой код
>
>
>class parent
>{
>   public:
>   ......
>   virtual string someFunc(string){...};
>   ......
>};
>
>class child : public parent
>{
>   public:
>   string someFunc(string){...};
>}
>
>main()
>{
>   vector<parent> vp;
>   vp.push_back(child());
>   vp.push_back(child());
>   .....................
>   vector<parent>::iterator it;
>   for(it = vp.begin(); it != vp.end(); it++)
>      it->someFunc();
>}
>
>в цикле вызывается функция parent::someFunc(), а хотелось бы child::someFunc.
>Если использовать обычный массив, то все идет нормально.
>Что я не так думаю про векторы, итераторы...?
>
>Спасибо.


Срабатывает конструктор-копировщик. Перегрузите его.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "vector + полиморфизм"  
Сообщение от phpcoder (??) on 30-Май-07, 08:07 
[...]
>   vector<parent> vp;
>   vp.push_back(child());
>   vp.push_back(child());
>   .....................
>   vector<parent>::iterator it;
>   for(it = vp.begin(); it != vp.end(); it++)
>      it->someFunc();
>}

У меня примерно такой код работает:

vector<parent *> vp;
vp.push_back(new child());
vp.push_back(new child());
...
for(vector<parent *>::cont_iterator it = vp.begin();
    it != vp.end();
    ++it){
    (*it)->someFunc();
}


Может и вам он поможет.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру