Я использую массив в простой программе логического симулятора, и я хочу переключиться на использование вектора, чтобы изучить его, но ссылка, которую я использую «OOP в C++ by Lafore», не имеет много о векторах и объектах, поэтому я я вроде потерял.различные типы объектов в том же векторном массиве?
Вот предыдущий код:
gate* G[1000];
G[0] = new ANDgate() ;
G[1] = new ORgate;
//gate is a class inherited by ANDgate and ORgate classes
class gate
{
.....
......
void Run()
{ //A virtual function
}
};
class ANDgate :public gate
{.....
.......
void Run()
{
//AND version of Run
}
};
class ORgate :public gate
{.....
.......
void Run()
{
//OR version of Run
}
};
//Running the simulator using overloading concept
for(...;...;..)
{
G[i]->Run() ; //will run perfectly the right Run for the right Gate type
}
Теперь то, что я хочу сделать, это
vector(gate*) G;
ANDgate a
G.push_back(a); //Error
ORgate o
G.push_back(o); //Error
for(...;...;...)
{
G[i]->Run(); //Will this work if I corrected the error ??
}
так может вектор массив хранения различных типов объектов (ANDgate, ORgate), но они наследуют тип векторного массива (ворота) ????
Пожалуйста, не используйте ручное управление памятью. При * очень * наименее доступной реализации 'shared_ptr', либо от Boost, либо TR1, либо от C++ 0x''. И для такого рода вещей, которые вы делаете, вы можете заглянуть в [контейнеры указателей Boost] (http://www.boost.org/doc/libs/1_43_0/libs/ptr_container/doc/ptr_container.html). –
GManNickG
Я не знаю, что такое shared_ptr :(и я не понимаю рисков этого. – Ahmed
shared_ptr не являются рисками, они являются факторами, снижающими риск. Они заботятся об удалении, когда кодеры забывают называть delete при их новых распределениях – DumbCoder