Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2017, 08:09   #21
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Тут не нужны указатели, а про контейнеры речь была только о том, что у класса должен быть нормальный интерфейс, как в том же примере Лафоре.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.05.2017, 10:07   #22
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Нормальный интерфейс это названия переменных и методов?
KAMLS вне форума Ответить с цитированием
Старый 10.05.2017, 10:21   #23
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Названия переменных и остального тоже важны, но под интерфейсом тут имеется в виду то, что доступно снаружи класса. Ну то есть как его использовать.

В примере Лафоре
Код:
	Stack s1;
	s1.push(11);
	s1.push(22);
	cout<<"1: "<<s1.pop()<<endl;
	cout<<"2: "<<s1.pop()<<endl;
все понятно даже без заглядывания внутрь реализации + сам класс стека никак не связан с консолью, можно вводить значения откуда угодно (консоль, файл, сеть, генератор псевдослучайных чисел, ...) и выводить куда угодно не трогая реализацию стека. Ну и куча других преимуществ.

Всегда стоит стараться изолировать побочные эффекты типа ввода/вывода, а не размазывать их по всему коду.
Это например упрощает тестирование.

Вы ж в своем коде можете проверить работу только вводя что-то в консоль. И каждый раз это делать уныло, будет лень пробовать все варианты и т.п.

https://www.youtube.com/watch?v=Z3w6eMq7etw
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 10.05.2017 в 10:24.
Alex11223 вне форума Ответить с цитированием
Старый 10.05.2017, 11:11   #24
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Спасибо, учту.
KAMLS вне форума Ответить с цитированием
Старый 10.05.2017, 14:43   #25
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Я поразмышлял над тем что вы сказали, вроде полезно-понятно, особенно видео насчет тестирования.
Но вы вот тут написали "можно вводить значения откуда угодно (консоль, файл, сеть, генератор псевдослучайных чисел, ...) и выводить куда угодно не трогая реализацию стека."
Как так то?
У Лафоре есть только одна возможность вводить значения, вбивая значения в код при наборе программы.
Вы же видите как там написано:
Код:
Stack s1;
	s1.push(11);
	s1.push(22);
	cout<<"1: "<<s1.pop()<<endl;
	cout<<"2: "<<s1.pop()<<endl;
Значения 11 и 22 вбиты в код вручную. Откуда еще тут могут взяться значения? С какой консоли?
KAMLS вне форума Ответить с цитированием
Старый 10.05.2017, 15:03   #26
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

Пример о коробке для торта и апельсинов был же уже ранее.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.05.2017, 15:54   #27
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Да блин...

Код:
class Queue
{
public:
    void push(int value)
{
    //записываем value в очередь
}
};

void main()
{
     int val;
    Queue q;

     cin >> val;  //вот ввод с клавиаутры весь тут, в Queue его нет
    q.push(val); //а вот терь делаем пуш того, что ввели с клавиаутры
}
alexzk вне форума Ответить с цитированием
Старый 10.05.2017, 17:56   #28
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Спасибо, я понял смысл внушений)))
Надо делать класс и его методы как можно более независимыми и универсальными.
Да и параметры очереди лучше заводить извне наверное? Чтобы не было нужды переписывать если размер очереди надо изменить. Так?
Вы скидку делайте, я второй месяц изучаю С++)) Не каждый день и не весь день.
KAMLS вне форума Ответить с цитированием
Старый 10.05.2017, 18:39   #29
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Простенькая очередь:
Код:
#include <iostream>
 
 
template<typename T>
class Queue
{
public:
    Queue() : mFirst(0), mLast(0) {}
    
    void push(const T &value)
    {
        mLast = new QueueNode(value, mLast, 0);
        if (mFirst == 0) {
            mFirst = mLast;
        } else {
            mLast->prev->next = mLast;
        }
    }
    
    bool pop()
    {
        if (mFirst) {
            QueueNode *d = mFirst;
            if (mFirst == mLast) {
                mLast = mFirst = 0;
            } else {
                mFirst = mFirst->next;
                mFirst->prev = 0;
            }
            delete d;
        }
        return mFirst != 0;
    }
    
    T *top() const
    {
        if (mFirst) {
            return &(mFirst->value);
        }
        return 0;
        
    }
    
    ~Queue()
    {
        while (pop()) {
        }
    }
private:
    struct QueueNode {
        QueueNode (const T &value_, QueueNode *prev_, QueueNode *next_) : value(value_), prev(prev_), next(next_){}
        T value;
        QueueNode *prev;
        QueueNode *next;
    };
    QueueNode *mFirst;
    QueueNode *mLast;
};
 
 
int main()
{
    Queue<int> q;
    q.push(10);
    q.push(12);
    q.push(13);
    while (q.top()) {
        std::cout << *q.top() << ", ";
        q.pop();
    }
}
Croessmah вне форума Ответить с цитированием
Старый 10.05.2017, 18:43   #30
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Параметры чего? MAX? (размер массива)
Это сложнее сделать для обычного массива, для него размер должен константой на момент компиляции. Тогда надо либо создавать через new (и удалять через delete), либо взять std::vector, либо использовать связный список вместо массива.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 10.05.2017 в 18:45.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вводим 15 элементов в очередь, затем выводим на экран эту очередь и добавил в очередь еще один элемент. Потом удаляем любой элемен Xumera C++ Builder 2 07.12.2013 13:56
Очередь sys*.12 Паскаль, Turbo Pascal, PascalABC.NET 1 05.12.2012 04:43
Очередь fenix0093 Помощь студентам 1 30.11.2012 16:15
Очередь Си svetikzo Помощь студентам 0 23.01.2010 10:03
Очередь C++ svetikzo Помощь студентам 2 23.01.2010 09:53