Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
6年前关闭。
我正在尝试学习和实现类,并遇到了实现嵌套类的问题。我已经实现了它的一个版本。我想问一下您是否认为这是嵌套类的一个好例子?我们如何在不嵌套这些类的情况下实现相同的目的?
实现嵌套类的问题。
对于“嵌套课程练习”的链表更合适。
我应该怎么做?我应该如何处理?
编写尽可能少,重用现有解决方案,并保持简单。
有书籍吗?
应该有关于设计模式的书,但是对于他们来说可能还为时过早。我建议保持练习一段时间,最好使用您感兴趣的实际问题。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
6年前关闭。
我正在尝试学习和实现类,并遇到了实现嵌套类的问题。我已经实现了它的一个版本。我想问一下您是否认为这是嵌套类的一个好例子?我们如何在不嵌套这些类的情况下实现相同的目的?
#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();
};
最佳答案
我想问一下您是否认为这是一个很好的课堂设计?
不,因为您不需要链表来实现堆栈,因为您不会引发异常,因为您没有使用现有的解决方案(例如std::stack
,std::vector
或std::deque
),而且因为您的课程是不遵守rule of three。
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;
}
};
实现嵌套类的问题。
对于“嵌套课程练习”的链表更合适。
我应该怎么做?我应该如何处理?
编写尽可能少,重用现有解决方案,并保持简单。
有书籍吗?
应该有关于设计模式的书,但是对于他们来说可能还为时过早。我建议保持练习一段时间,最好使用您感兴趣的实际问题。