0

我正在尝试学习和实现类,并遇到了实现嵌套类的问题。我已经实现了它的一个版本。我想问你是否会认为它是嵌套类的好例子?我们如何在不嵌套这些类的情况下达到相同的目的?

#include<iostream>

class Stack {
    class Node {
        public:
            int data;
            Node* next;
            Node(int data, Node* next);
            ~Node();
    }* head;
    public:
        Stack();
        Stack(const Stack& s);
        void operator=(const Stack& s);
        ~Stack();
        void push(int data);
        int peek() const;
        int pop();
};
4

2 回答 2

3

我想问你是否会认为这是一个好的班级设计?

不,因为您不需要链表来实现堆栈,因为您不会抛出异常,因为您没有使用现有的解决方案(例如std::stack,std::vectorstd::deque),并且因为您的类不遵守三规则

template<typename Val> class Stack{
protected:
    typedef std::vector<Val> Data;
    Data data;     
public:
    const Val& top() const{
        if (!data.size())
            throw std::underflow_error();
        return data[data.size()-1];
    }
    void push(const Val& arg){
        data.push_back(arg);
    }
    Val pop(){
        Val result = top();
        data.pop_back();
        return result;
    }
};

这个实现嵌套类的问题。

对于“嵌套类练习”链表比较合适。

我应该怎么做?我应该怎么做?

尽可能少写,重用现有解决方案,并保持简单。

有没有关于它的好书?

应该有关于设计模式的书籍,但对他们来说可能还为时过早。我建议继续练习一段时间,最好使用你感兴趣的实际问题。

于 2013-10-08T16:48:52.313 回答
0

我个人认为嵌套类可能是一个不错的设计选择,但您需要权衡它们是否适合您当前的情况。在您的特定情况下,对我来说将它实现为嵌套类似乎很好。我认为嵌套类只有很少的功能并且特定于它嵌套的类是很重要的。

如需进一步讨论,请查看此线程:Pros and cons of using nested C++ classes and enumerations?

希望这可以帮助 :)

编辑:另一种方法是将其实现为平面类结构并且不嵌套类。这有一些优点,比如可以进行前向声明,这对于更复杂的结构很有用。

于 2013-10-08T17:01:23.220 回答