C++ 如何使派生类定义数据结构

C++ 如何使派生类定义数据结构,c++,templates,inheritance,C++,Templates,Inheritance,我正在写一个解谜程序 每种类型的拼图都继承自拼图类(虚拟) 像这样 类跳转:拼图 拼图解算器(使用模板编写)尝试拼图的每一个步骤,以及那些 一直尝试直到得到答案 但每个谜题都有不同的“步骤”数据结构 如何在puzzle(虚拟类)中使用“state”,以便其所有派生类都在其中定义单独的“step”数据结构?创建一个状态类,该状态类具有基本puzzle类所需的接口。例如,您需要能够复制状态 class state { public: virtual state *copy() = 0;

我正在写一个解谜程序

每种类型的拼图都继承自拼图类(虚拟)

像这样

类跳转:拼图

拼图解算器(使用模板编写)尝试拼图的每一个步骤,以及那些 一直尝试直到得到答案

但每个谜题都有不同的“步骤”数据结构


如何在puzzle(虚拟类)中使用“state”,以便其所有派生类都在其中定义单独的“step”数据结构?

创建一个状态类,该状态类具有基本puzzle类所需的接口。例如,您需要能够复制状态

class state {
  public:
  virtual state *copy() = 0;
  virtual ~state();
};
然后创建一个抽象方法来构造puzzle类中的状态

class puzzle {
virtual state *initial_state(void) = 0;
  virtual step(void) = 0;
})


在特定类型的谜题的特定谜题类中,为该类型的谜题定义一个新的状态类,并创建将返回该类型状态并可从基类调用的方法。您可能还需要迭代器来了解下一步可能的步骤,并了解您的解决方案有多好/接近。

“抽象方法”——您是指纯虚拟成员函数吗?@Jeffrey Yes;纯虚拟成员函数也许更清楚一些,尽管我认为抽象在通用面向对象术语中是足够常见的,在谈论C++时它是合理的。但重点更在于在状态类中定义状态和谜题类之间的接口,而状态类对于直接实例化可能没有用处,并且可能具有纯虚拟成员函数。