我有以下表示堆栈的类。
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
也会遗传吗?
最佳答案
由于 Exception
是从属名称,您应该使用第二个代码段。
关于c++ - 关于异常继承语法的一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57906624/