C++ 动态对象构造

标签 c++ inheritance

我有一个基类,

class Msg
{
   public:

     ParseMsg()
     {
         ParseMsgData();
         ParseTrailer();
     }
     virtual void ParseMsgData() = 0;
     ParseTrailer();

};

和派生类,

class InitiateMsg : public Msg
{
    public:
    void ParseMsgData() { ... }
};


class ReadOperationMsg  public Msg
{
   public:
    void ParseMsgData() { ... }
};


class WriteOperationMsg  public Msg
{ 
   public:

    void ParseMsgData() { ... }
};

场景如下,

    void UsageFunction(string data)
    {
      Msg* msg = ParseHeader(data);
      ParseMsg
    }

   Msg* ParseHeader(string data)
   {

        Msg *msg = NULL;
           ....
         switch() 
         {

            case 1: 

                 msg = new InitiateMsg();
                 break;
            case 2:
                 msg = new ReadOperationMsg{();
                 break;
             case 3:
                 msg = new WriteOperationMsg{();
                 break;
               ....

         }

          return msg;           
    }

基于数据,ParseHeader 方法将决定必须创建哪个对象,所以我在我使用的类之外​​实现了 ParseHeader 函数。如何在 Msg 类中创建 ParseHeader 函数然后使用它?

在 C# 中,通过在类中将 ParseHeader 方法定义为静态方法并从外部使用它来实现同样的效果,

最佳答案

您需要 Abstract Factory 设计模式。它是为像您这样的场景定制的。
内联链接用一个简单的例子比我在这里解释得更详细。

关于C++ 动态对象构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10083391/

相关文章:

javascript原型(prototype)继承覆盖属性

c++ - 非最后一个参数包编译错误

C++ 没有匹配的调用函数

c++ - 为什么在计算多项式时霍纳斯方法没有溢出

python - 类型错误 : Error when calling the metaclass bases module

java - 如何编写类型来自 Java 中另一个类的构造函数?

c++ - 仅当从 C++11 中的 B 派生时,如何有条件地调用 B::f?

python - 在 pythran 中使用日期时间

.net - 有没有办法找到哪些 .NET 类实现了某个接口(interface)?

JavaScript 原型(prototype)继承