我应该使用什么设计模式来避免虚拟代码?

时间:2014-11-03 12:26:15

标签: c++ design-patterns

我有一个基类 -

class content
{

private:
  int m_data;

public:

  int getdbhandle() { return m_sql_db; }

  void setData(int data) { m_data = data; }

  virtual int getterrestrialServices { qDebug()"This is a dummy interface"; }

};


class telecontent: public content
{

   virtual int getterrestrialServices { qDebug()" Real implementation here"; }

};

现在,当产品类型为tele时,类内容被实例化为telecontent。 但是,当产品类型是通用的时 - 虚拟界面打印继续存在。 我怎么能避免这样?是否存在任何强制基类不实现虚函数的设计模式?我想要一种有效的方法,只有派生类才有方法。我不希望基类拥有该方法。但是,我无法修改调用者 - 代码 - 因此不会调用该方法。我想要最好的策略设计方法,以避免虚拟接口。

2 个答案:

答案 0 :(得分:2)

  

是否存在任何强制基类不设计的设计模式   实现虚函数?

Pure virtual允许这样:

class content
{

private:
  int m_data;

public:
  virtual ~content() { }
  int getdbhandle() { return m_sql_db; }

  void setData(int data) { m_data = data; }

  virtual int getterrestrialServices() = 0; // pure virtual

};

这意味着没有人可以创建内容实例(会导致编译器错误),因此当某些人从内容继承时,他们必须提供getterrestrialServices()的实现(否则,他们将得到编译器错误)。

答案 1 :(得分:0)

你需要的是纯粹的虚拟:

virtual int getterrestrialServices() = 0;

它将强制每个类继承内容来实现它,并且您将无法创建内容类,只能从中继承类,因此您不会拥有虚拟打印。