我正在努力学习和实现类,并遇到了实现嵌套类的问题。我已经实现了它的一个版本。我想问一下,您是否认为它是嵌套类的一个很好的例子?我们如何才能在不嵌套这些类的情况下达到同样的目的?
#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();
};发布于 2013-10-08 16:48:52
我想问你是否认为这是一个好的班级设计?
不,因为您不需要链表来实现堆栈,因为您不抛出异常,因为您没有使用现有的解决方案(如std::stack、std::vector或std::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-08 17:01:23
我个人认为嵌套类可以是一个很好的设计选择,但是如果它们适合您当前的情况,您需要权衡它们。在您的具体情况下,我认为将其实现为嵌套类似乎很好。我认为重要的是,嵌套类只具有很少的功能,并且特定于嵌套在其中的类。
有关进一步的讨论,请参阅以下线程:使用嵌套C++类和枚举的利弊?
希望这会有所帮助:)
编辑:另一种方法是将其实现为平面类结构,而不是嵌套类。这有一些优点,比如可以进行前向声明,这对于更复杂的结构是有用的。
https://stackoverflow.com/questions/19253493
复制相似问题