?

Log in

!false · IT · emo


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

Свежие записи · Архив · Друзья · Личная информация

* * *
Вот что бывает, когда пишешь на 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];
}
* * *
* * *
[User Picture]
On Июнь, 11, 2009 15:26 (UTC), gdever commented:
Велика, необъятна и эпична эта софтина. Каждая из её 1.5М строк кода пронизана болью.
[User Picture]
On Июнь, 13, 2009 20:53 (UTC), danila_fizik replied:
о да.
* * *
On Июнь, 11, 2009 15:31 (UTC), powerrr commented:
Так это же Kитайский код!
[User Picture]
On Июнь, 13, 2009 20:57 (UTC), danila_fizik replied:
"Очень часто китайский код пишут тупые студенты, которые пришли учиться по неясным причинам. Потом такой код приходится долго вкуривать. Выражение «ебу и патчу» произошло благодаря как раз таким случаям."

Да, это наш случай :) Доработки неотрефакторенных мест требуют долгой предварительной медитации.
* * *
[User Picture]
On Июнь, 11, 2009 15:45 (UTC), eosunknown commented:
ояебу
* * *

Previous Entry · Поплакать на клавиатуре · Поделиться · Next Entry