如何实现类变量的虚拟函数重写

How to implement virtual function override for class vars

本文关键字:虚拟 函数 重写 类变量 何实现 实现      更新时间:2023-10-16

在下面的示例中,我想在每个TradingStrategy(1-N).cpp文件中创建本地覆盖。有人能告诉我在c++中实现这一点的最直接/标准的方法吗?

谢谢,Mike

// 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 )
{
...
}

有几种方法可以做到这一点:

  1. BuySide类继承N次,并在此处重写方法。对不同的TradingStragegy使用不同的BuySide子体。

  2. BuySide移到父类中,使onQuoteByExit调用ParentClass的虚拟方法,并在子类中覆盖此虚拟方法。

  3. BuyClass中添加一个方法指针字段,并将其分配给TradingNClass的构造函数。使用此字段可以从BuyClassonQuoteByExit方法调用它所指向的方法。

我个人更喜欢第二种方式。我想所有这些on*方法都应该由策略实现(覆盖),然后将它们放在基类中更简单。