如何提出好的设计?

时间:2013-10-08 16:39:52

标签: c++ class nested-class

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

#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();
};

2 个答案:

答案 0 :(得分:3)

  

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

不,因为您不需要链表实现堆栈,因为您没有抛出异常,因为您没有使用现有的解决方案(例如std::stackstd::vector或{{ 1}}),因为你的班级不遵守rule of three

std::deque
  

实现嵌套类的这个问题。

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

  

我应该怎么做?我的方法应该是什么?

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

  

有没有好书?

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

答案 1 :(得分:0)

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

有关进一步的讨论,请参阅此主题:Pros and cons of using nested C++ classes and enumerations?

希望这会有所帮助:)

编辑:一种不同的方法是将其实现为平面类结构,而不是嵌套类。这具有一些优点,例如前向声明的可能性,这对于更复杂的结构非常有用。