2013-07-16 3 views
1

В приведенном ниже примере я хотел бы создать локальные переопределения в каждом файле .CPP TradingStrategy (1-N). Может ли кто-нибудь сказать мне самый простой/стандартный способ реализовать это в C++?Как реализовать переопределение виртуальных функций для классов vars

Спасибо, Майк

// TradingSide.h file 
class BuySide: public CTradingSide{ 
public: 
BuySide(CBMTTradingStrategy *p_Strategy, bool p_buySellSide, u32 p_spotInstIndex, u32 p_futInstIndex); 
~BuySide(); 
virtual void onQuoteBuyExit(u32 p_instIndex); 
virtual void onQuoteBuyEntry(u32 p_instIndex); 
virtual void onFIXBuyEntry(u32 p_orderIndex, bmt_eng_events_t p_orderEvent); 
virtual void onFIXBuyExit(u32 p_orderIndex, bmt_eng_events_t p_orderEvent); 
virtual inline bool isBuyEntryCriteriaSatisfied(bmt_price_t &p_spotCash, u32 &p_buySpotQty ); 
}; 

class SellSide: public CTradingSide{ 
public: 
SellSide(CBMTTradingStrategy *p_Strategy, bool p_buySellSide, u32 p_spotInstIndex, u32 p_futInstIndex); 
~SellSide(); 
virtual void onQuoteSellExit(u32 p_instIndex); 
virtual void onQuoteSellEntry(u32 p_instIndex); 
virtual void onFIXSellEntry(u32 p_orderIndex, bmt_eng_events_t p_orderEvent); 
virtual void onFIXSellExit(u32 p_orderIndex, bmt_eng_events_t p_orderEvent); 
virtual inline bool isSellEntryCriteriaSatisfied(bmt_price_t &p_spotCash, u32 &p_sellSpotQty ); 
}; 

// TradingStrategy1.h file 
class Trading1Class: public ParentClass{ 
... 
SellSide *mySellSide; 
BuySide *myBuySide; 
} 
// TradingStrategy1.cpp file 
Trading1Class::BuySide::onQuoteBuyExit(u32 p_instIndex) 
{ 
... 
} 

// TradingStrategy2.h file 
class Trading2Class: public ParentClass{ 
... 
SellSide *mySellSide; 
BuySide *myBuySide; 
} 
// TradingStrategy2.cpp file 
Trading1Class::BuySide::onQuoteBuyExit(u32 p_instIndex) 
{ 
... 
} 
+0

Реализуйте, что именно? Как написать функцию, которая выполняет торговую транзакцию? –

+0

Вы можете создать вложенный класс 'в каждом из торговых (1-n) классов и вместо этого использовать BuySide/SellSide. I.e: Trading1Class: public ParentClass {... class MySellSide: public SellSide {onQuoteBuyExit (u32 p_instIndex) {...}}; }; –

+0

Существует не такая вещь, как «локальное переопределение», и вы не можете писать разные тела для одного и того же метода, но после некоторой перепроектировки это должно стать возможным для достижения вашей цели (я думаю, что виртуальные методы будут лучше всего подходят). – Inspired

ответ

0

Есть несколько подходов, чтобы сделать это:

  1. наследоваться от класса BuySide N раз и переопределить методы здесь. Используйте другой BuySide потомки для разных TradingStragegy.

  2. Перемещение BuySide в родительский класс, сделать onQuoteByExit вызвать виртуальный метод ParentClass и переопределить этот виртуальный метод в потомках.

  3. Добавить поле метода-указателя в BuyClass и назначить его в конструкторах TradingNClass. Используйте это поле для вызова метода, указанного им от onQuoteByExit метода BuyClass.

Я лично предпочел бы второй способ. Я предполагаю, что все эти методы on* должны быть реализованы (переопределены) стратегиями, тогда их проще в базовом классе.

+0

Ребята, спасибо за отзыв. Я сделал предложенные изменения и выбрал вариант 2 выше. –

+0

Ребята, спасибо за отзыв. Я сделал предложенные изменения и выбрал вариант 2 выше. –

Смежные вопросы