我有以下表示堆栈的类。
template <class T>
class stack {
...
public:
explicit stack(int max_size = 100);
stack(const Stack& s);
~stack();
stack& operator=(const Stack&);
void push(const T& t);
void pop();
T& top();
const T& top() const;
int getSize() const;
class Exception : public std::exception {};
class Full : public Exception {};
class Empty : public Exception {};
};
现在,我有了第二个继承自堆栈的类。相似,但是它有一个称为popConditional
的特殊方法,该方法将元素弹出堆栈,直到堆栈的顶部元素满足通用条件为止。
如果没有这样的元素,则应该抛出一个名为NotFound
的类的异常,该类继承自Exception
中定义的类Stack
。我的问题是正确的语法是什么?
template <class T>
class ConditionalStack : public Stack<T> {
public:
class NotFound : public Exception {
const char* what() const override { return "not found"; }
};
};
或
template <class T>
class ConditionalStack : public Stack<T> {
public:
class NotFound : public Stack<T>::Exception {
const char* what() const override { return "not found"; }
};
};
如果第一个不正确,为什么会这样呢?类Exception
是否也应该被继承?
答案 0 :(得分:2)
由于Exception
是一个从属名称,因此您应该使用第二个代码段。