Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何实现类变量的虚拟函数重写_C++_Class_Variables_Virtual - Fatal编程技术网

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

C++ 如何实现类变量的虚拟函数重写,c++,class,variables,virtual,C++,Class,Variables,Virtual,在下面的示例中,我希望在每个TradingStrategy(1-N).cpp文件中创建本地覆盖。有人能告诉我在C++中实现这个的最直接/最标准的方法吗? 谢谢, 迈克 有几种方法可以做到这一点: 从您的BuySide类继承N次,并在此处重写方法。使用不同的BuySide子代进行不同的TradingStragegy 将BuySide移动到父类中,使onQuoteByExit调用ParentClass的虚拟方法,并在子类中重写此虚拟方法 将方法指针字段添加到BuyClass中,并将其分配到tradi

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


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

  • 从您的
    BuySide
    类继承N次,并在此处重写方法。使用不同的
    BuySide
    子代进行不同的
    TradingStragegy

  • BuySide
    移动到父类中,使
    onQuoteByExit
    调用
    ParentClass
    的虚拟方法,并在子类中重写此虚拟方法

  • 将方法指针字段添加到
    BuyClass
    中,并将其分配到
    tradingclass
    的构造函数中。使用此字段从
    BuyClass
    onQuoteByExit
    方法调用它所指向的方法


  • 我个人更喜欢第二种方式。我猜*上的所有
    方法都应该由策略来实现(覆盖),那么将它们放在基类中就更简单了。

    具体实现什么?如何编写执行交易交易的函数?您可以在每个交易(1-n)类中创建嵌套类,并让这些类扩展BuySide/SellSide。即:Trading1类:公共父类{…类MySellSide:public SellSide{onQuoteBuyExit(u32 p_instIndex){…};};没有“本地覆盖”这样的东西,你不能为同一个方法编写不同的主体,但经过一些重新设计后,应该可以实现你的目标(我认为虚拟方法最合适)。伙计们,谢谢你们的反馈。我已经做了建议的修改,选择了上面的选项2。伙计们,谢谢你们的反馈。我已经做出了建议的更改,并选择了上面的选项2。
    // 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 )
    {
    ...
    }