在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);
}
答案 0 :(得分:1)
首先:
template<class T> class JobStack : public MyStack<T>, public std::stack<T>{};
第二,回答你的问题:不,你不能。 因为,正如其中一条评论中指出的那样,您继承了两个不同的类,这意味着您将拥有两个继承的pop()函数。您将不得不在派生类中实现pop()。 如果您仍想在std :: stack中使用该实现,那么只需在实现中调用它。
第三,尝试从main调用pop()时可能仍然会出错,因为现在,您的类对两个不同的函数有名称冲突。如果出现此问题,我建议将MyStack中的函数重命名为myPop()或其他内容。