The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
vector + полиморфизм, !*! primus, 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.
Если использовать обычный массив, то все идет нормально.
Что я не так думаю про векторы, итераторы...?

Спасибо.

  • vector + полиморфизм, !*! Niam, 23:24 , 29-Май-07 (1)
    >Есть прибл. такой код
    >
    >
    >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.
    >Если использовать обычный массив, то все идет нормально.
    >Что я не так думаю про векторы, итераторы...?
    >
    >Спасибо.


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

  • vector + полиморфизм, !*! phpcoder, 08:07 , 30-Май-07 (2)
    [...]
    >   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();
    }


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




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

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