c++继承设计

C++ inheritance design

本文关键字:继承 c++      更新时间:2023-10-16

我正在编写一个用于投资组合管理的c++。在这种情况下,一些股票可以从退休投资组合中取出,其余的股票在公开市场上出售。我的总体计划是将数据放在以下类中。

class Equity { private:  std::string name, exchange, symbol };
class EquityHistory : public Equity { private std::list<DateRecord> history };
class YahooDAO {};
class RetirementDAO {};
class Portfolio { private: std::list<EquityHistory> equities; }

在主类或上层类中,投资组合使用股票列表填充。DAO类提供了从web获取价格历史的功能。我的问题是如何让Portfolio类根据交易所调用正确的DAO类。

你可以将你的两个数据提供程序包装在第三个数据提供程序中,该数据提供程序将根据交换进行重定向。

这种方式从Portfolio的角度来看都是抽象的,它不知道数据源,如果以后您决定改变获取数据的方式,您将不必更新Portfolio类。

思路如下:

class DAO
{
    private: YahooDAO* yahoo, RetirementDAO* retirement;
    public: DAO()
    {
        yahoo = new YahooDAO();
        retirement = new RetirementDAO();
    }
    public: std::List<Data> getData(EquityHistory* equity)
    {
        std::List<Data> data;
        if (equity->exchange = "some exchange")
        {
            data = yahoo->getData(equity);
        }
        else if (equity->exchange = "another exchange")
        {
            data = retirement->getData(equity);
        }
        return data;
    }
};
class Portfolio
{
    private: std::list<EquityHistory> equities;
    private: DAO* dao;
    public: Portfolio(DAO* dao)
    {
        this->dao = dao;
    }
    public: void loadData()
    {
        ...
        std::List<Data> data = dao->getData(equity);
        ...
    }
};

如果需要,可以使用接口IDataSource抽象getData方法。