如何实现类变量的虚拟函数重写
How to implement virtual function override for class vars
在下面的示例中,我想在每个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 )
{
...
}
有几种方法可以做到这一点:
-
从
BuySide
类继承N次,并在此处重写方法。对不同的TradingStragegy
使用不同的BuySide
子体。 -
将
BuySide
移到父类中,使onQuoteByExit
调用ParentClass
的虚拟方法,并在子类中覆盖此虚拟方法。 -
在
BuyClass
中添加一个方法指针字段,并将其分配给TradingNClass
的构造函数。使用此字段可以从BuyClass
的onQuoteByExit
方法调用它所指向的方法。
我个人更喜欢第二种方式。我想所有这些on*
方法都应该由策略实现(覆盖),然后将它们放在基类中更简单。
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 用纯虚拟函数兜圈子
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 禁止子函数调用父级的抽象(或虚拟)函数
- 无法在子类中使用虚拟函数C++
- 无法在派生对象上运行虚拟函数
- 我可以调用从 main() 覆盖的虚拟函数吗?
- 在 C++ 中将函数获取和设置为虚拟函数
- 使用在堆栈上创建的对象调用虚拟函数
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在C++中使虚拟函数私有化
- 模板继承类中的虚拟函数
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- doxygenc++虚拟函数和实现
- 如何从派生类函数中调用虚拟函数