执行所有派生类的方法

时间:2013-06-30 11:47:21

标签: c++ polymorphism

我有一个命令行应用程序。它有一个抽象类,每个命令都是从该类派生的类。每个班级都有虚拟功能帮助。我有一个命令帮助。该命令应该执行每个命令的帮助方法。我怎样才能做到这一点。如果我没有清楚解释......

class Base {
public:
    virtual void help() = 0;
};

class Derived : public Base {   
public:
    virtual void help();
};


class Derived1 : public Base {  
public:
    virtual void help();
};


class Derived2 : public Base {  
public:
    virtual void help();
};

class DerivedToCallEveryHelp : public Base {    
//How can I execute help functions of every dervied class
};

提前致谢:)

2 个答案:

答案 0 :(得分:2)

迭代具有所有类的实例的集合,或者创建一个类的工厂函数。然后在每个上调用.Help()。

答案 1 :(得分:1)

您需要构建一个指向Base类型的集合,并执行一次购买。 BTW, DerivedToCallEveryHelp 应该是一个独立的类,它不需要继承 Base

#include <memory>
#include <vector>

class DerivedToCallEveryHelp
public:  
  DerivedToCallEveryHelp()
  {
      helps.push_back(std::unique_ptr<Base>(new Derived()));
      helps.push_back(std::unique_ptr<Base>(new Derived1()));
      helps.push_back(std::unique_ptr<Base>(new Derived2()));
  }

  void Execute()
  {
     for(auto & item: helps)
     {
          item->help();
     }
  }

private:
  std::vector<std::unqiue_ptr<Base> helps;

};