我有一个基类 -
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。 但是,当产品类型是通用的时 - 虚拟界面打印继续存在。 我怎么能避免这样?是否存在任何强制基类不实现虚函数的设计模式?我想要一种有效的方法,只有派生类才有方法。我不希望基类拥有该方法。但是,我无法修改调用者 - 代码 - 因此不会调用该方法。我想要最好的策略设计方法,以避免虚拟接口。
答案 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;
它将强制每个类继承内容来实现它,并且您将无法创建内容类,只能从中继承类,因此您不会拥有虚拟打印。