我正在尝试学习和实现类,并遇到了实现嵌套类的问题。我已经实现了它的一个版本。我想问你是否会认为它是嵌套类的一个很好的例子?如果不嵌套这些类,我们怎样才能达到同样的目的呢?
#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();
};
答案 0 :(得分:3)
我想问你是否认为这是一个好的班级设计?
不,因为您不需要链表实现堆栈,因为您没有抛出异常,因为您没有使用现有的解决方案(例如std::stack
,std::vector
或{{ 1}}),因为你的班级不遵守rule of three。
std::deque
实现嵌套类的这个问题。
对于“嵌套类练习”链表更合适。
我应该怎么做?我的方法应该是什么?
尽可能少地写,重用现有的解决方案,并保持简单。
有没有好书?
应该有关于设计模式的书籍,但对他们来说可能为时尚早。我建议你继续练习一段时间,最好是使用你感兴趣的实际问题。
答案 1 :(得分:0)
我个人认为嵌套类可以是一个很好的设计选择,但是你需要权衡它们是否适合你当前的情况。在您的具体情况下,将它实现为嵌套类似乎很好。我认为重要的是,嵌套类只有很少的功能,并且特定于它嵌套的类。
有关进一步的讨论,请参阅此主题:Pros and cons of using nested C++ classes and enumerations?
希望这会有所帮助:)
编辑:一种不同的方法是将其实现为平面类结构,而不是嵌套类。这具有一些优点,例如前向声明的可能性,这对于更复杂的结构非常有用。