首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何设计出好的设计?

如何设计出好的设计?
EN

Stack Overflow用户
提问于 2013-10-08 16:39:51
回答 2查看 110关注 0票数 0

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

代码语言:javascript
运行
复制
#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();
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-08 16:48:52

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

不,因为您不需要链表来实现堆栈,因为您不抛出异常,因为您没有使用现有的解决方案(如std::stackstd::vectorstd::deque),而且您的类不服从三条规则

代码语言:javascript
运行
复制
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;
    }
};

实现嵌套类的问题。

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

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

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

上面有好书吗?

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

票数 3
EN

Stack Overflow用户

发布于 2013-10-08 17:01:23

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

有关进一步的讨论,请参阅以下线程:使用嵌套C++类和枚举的利弊?

希望这会有所帮助:)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19253493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档