我可以直接继承实现以满足c ++中的接口

时间:2017-04-25 18:42:49

标签: c++

在C ++中,如果我知道一个类会满足虚方法,是否可以修改下面的代码来直接继承它?现在编译器说不允许不完整的类型。我可以写一个包装器,但是有直接的方法吗?

#include <stack>

template<class T> class MyStack{
public:
    virtual T pop()=0;
};

template<class T> class JobStack : public MyStack<T>, public std::stack<T>;

int main()
{
    JobStack<int> a;
    a.push(1);
    a.pop(a);
}

1 个答案:

答案 0 :(得分:1)

首先:

template<class T> class JobStack : public MyStack<T>, public std::stack<T>{};

第二,回答你的问题:不,你不能。 因为,正如其中一条评论中指出的那样,您继承了两个不同的类,这意味着您将拥有两个继承的pop()函数。您将不得不在派生类中实现pop()。 如果您仍想在std :: stack中使用该实现,那么只需在实现中调用它。

第三,尝试从main调用pop()时可能仍然会出错,因为现在,您的类对两个不同的函数有名称冲突。如果出现此问题,我建议将MyStack中的函数重命名为myPop()或其他内容。