о виртуальных функциях

Jun 11, 2009 18:41

Вот что бывает, когда пишешь на C++, не зная, зачем нужны виртуальные деструкторы...

классы CRPProp_0n - производные от общего базового класса. Вроде задумка неплохая, можно работать с их массивом, удобно. Но видимо, что-то не заладилось, почему-то их методы не вызывались (про виртуальные функции разработчик не знал)... И тут на выручку эмо-кодеру пришло приведение типов! Правда, про работу с массивом в цикле пришлось забыть...

CBroadcastPropPP::CBroadcastPropPP()
{
m_bAdminMode = FALSE;

m_aProps.Add(new CRPProp_01);
m_aProps.Add(new CRPProp_02);
m_aProps.Add(new CRPProp_021);
m_aProps.Add(new CRPProp_022);
m_aProps.Add(new CRPProp_03);
m_aProps.Add(new CRPProp_05);
m_aProps.Add(new CRPProp_06);
m_aProps.Add(new CRPProp_07);
}

#define PPPos_Dir 0
#define PPPos_Recursive 1
#define PPPos_Masks 2
#define PPPos_MaxSize 3
#define PPPos_Archive 4
#define PPPos_Subject 5
#define PPPos_Types 6
#define PPPos_MaxRcpt 7
#define PPPos_BCC 8

void CBroadcastPropPP::Initialize(IRegistrator* pRegistrator)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
m_pRegistrator=pRegistrator;

((CRPProp_01*)(m_aProps[PPPos_Dir]))->_Initialize(m_pRegistrator->m_sStartupPath, m_pRegistrator);
((CRPProp_02*)(m_aProps[PPPos_Recursive]))->_Initialize(m_pRegistrator->m_sStartupPath, m_pRegistrator);
((CRPProp_021*)(m_aProps[PPPos_Masks]))->_Initialize(m_pRegistrator->m_sStartupPath, m_pRegistrator);
((CRPProp_022*)(m_aProps[PPPos_MaxSize]))->_Initialize(m_pRegistrator->m_sStartupPath, m_pRegistrator);
((CRPProp_03*)(m_aProps[PPPos_Archive]))->_Initialize(m_pRegistrator->m_sStartupPath, m_pRegistrator);
((CRPProp_05*)(m_aProps[PPPos_Types]))->_Initialize(&m_pRegistrator->m_DB,m_pRegistrator->m_sStartupPath);
((CRPProp_06*)(m_aProps[PPPos_MaxRcpt]))->_Initialize(m_pRegistrator->m_sStartupPath, m_pRegistrator );
((CRPProp_07*)(m_aProps[PPPos_BCC]))->_Initialize(m_pRegistrator->m_sStartupPath, m_pRegistrator );
}

CBroadcastPropPP::~CBroadcastPropPP()
{
delete (CRPProp_01*)m_aProps[PPPos_Dir];
delete (CRPProp_02*)m_aProps[PPPos_Recursive];
delete (CRPProp_021*)m_aProps[PPPos_Masks];
delete (CRPProp_022*)m_aProps[PPPos_MaxSize];
delete (CRPProp_03*)m_aProps[PPPos_Archive];
delete (CRPProp_05*)m_aProps[PPPos_Types];
delete (CRPProp_06*)m_aProps[PPPos_MaxRcpt];
delete (CRPProp_07*)m_aProps[PPPos_BCC];
}
Previous post Next post
Up