有关异常继承中语法的问题

时间:2019-09-12 12:21:25

标签: c++ inheritance exception

我有以下表示堆栈的类。

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是否也应该被继承?

1 个答案:

答案 0 :(得分:2)

由于Exception是一个从属名称,因此您应该使用第二个代码段。