Как придумать хороший дизайн?

0

Я пытаюсь изучить и реализовать классы и столкнулся с этой проблемой реализации вложенных классов. Я внедрил его версию. Я хотел спросить, считаете ли вы его хорошим примером для вложенных классов? Как мы можем достичь той же цели, не встраивая эти классы?

#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();
};
Теги:
class
nested-class

2 ответа

3
Лучший ответ

Я хотел спросить, считаете ли вы его хорошим классом?

Нет, потому что вам не нужен связанный список для реализации стека, потому что вы не генерируете исключения, потому что вы не используете существующие решения (например, 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;
    }
};

эта проблема реализации вложенных классов.

Для "вложенных классов упражнений" список ссылок более подходит.

Как мне это сделать? Каким должен быть мой подход к этому?

Напишите как можно меньше, повторите использование существующих решений и сохраните их просто.

Есть ли хорошие книги?

Там должны быть книги о шаблонах дизайна, но для них может быть слишком рано. Я бы посоветовал просто продолжать практиковать какое-то время, предпочтительно используя реальные проблемы, которые вас интересуют.

  • 0
    «Вы не используете существующие решения (такие как std :: stack).» Это немного резко. Это нормально, чтобы сделать новое решение в качестве учебного упражнения.
  • 2
    @NeilKirk: Это правда, хотя. Изобретать колесо - это хорошее упражнение, но на самом деле это не очень хороший дизайн.
0

Я лично считаю, что вложенные классы могут быть хорошим выбором дизайна, но вам нужно взвесить, если они соответствуют вашей текущей ситуации. В вашем конкретном случае мне кажется, что это реализовать как вложенный класс. Я бы подумал, что важно, что вложенный класс имеет мало функциональности и специфичен для класса, в который он вложен.

Для дальнейшего обсуждения посмотрите в этой теме: Плюсы и минусы использования вложенных C++ классов и перечислений?

Надеюсь это поможет :)

edit: Другим подходом было бы реализовать его как плоскую структуру класса и не вставлять классы. Это имеет некоторые преимущества, такие как возможность форвардных объявлений, которые могут быть полезны для более сложных структур.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню