Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
 Аватар для northcitizen
38 / 31 / 9
Регистрация: 29.03.2019
Сообщений: 345

Класс стэка для работы с указателями

28.08.2020, 00:47. Показов 617. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем добра.
Приступил к изучению шаблонных классов и возник вопрос в таком примере
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// stcktp1.h -- modified Stack template
#pragma once
 
template <class Type>
class Stack
{
private:
    enum {SIZE = 10};    // default size
    int stacksize;
    Type *items;       // holds stack items
    int top;            // index for top stack item
public:
    explicit Stack(int ss = SIZE);
    Stack(const Stack & st);
    ~Stack() { delete [] items; }
    bool isempty() { return top == 0; }
    bool isfull() { return top == stacksize; }
    bool push(const Type & item);   // add item to stack
    bool pop(Type & item);          // pop top into item
    Stack<Type> & operator=(const Stack & st);
};
 
template <class Type>
Stack<Type>::Stack(int ss) : stacksize(ss), top(0)
{
    items = new Type [stacksize];
}
 
template <class Type>
Stack<Type>::Stack(const Stack & st)
{
    stacksize = st.stacksize;
    top = st.top;
    items = new Type [stacksize];
    for (int i = 0; i < top; i++)
        items[i] = st.items[i];
}
 
template <class Type>
bool Stack<Type>::push(const Type & item)
{
    if (top < stacksize)
    {
        items[top++] = item;
        return true;
    }
    else
        return false;
}
 
template <class Type>
bool Stack<Type>::pop(Type & item)
{
    if (top > 0)
    {
        item = items[--top];
        return true;
    }
    else
        return false;
}
 
template <class Type>
Stack<Type> & Stack<Type>::operator=(const Stack<Type> & st)
{
    if (this == &st)
        return *this;
    delete [] items;
    stacksize = st.stacksize;
    top = st.top;
    items = new Type [stacksize];
    for (int i = 0; i < top; i++)
        items[i] = st.items[i];
    return *this; 
}
данный шаблонный класс предназначен для работы с указателями.
В десятой строчке кода задан член для хранения указателя - items. Он задан как указатель. В принципе в этом и вопрос. Почему его задали, как указатель? Мы же, когда создаем экземпляр класса
C++
1
   Stack<const char *> st(stacksize);
уже в параметре указываем, что тип является указателем. Я пробовал работать с классом, когда items задан не как указатель -
C++
1
Type items;
. Так тоже работает.
Может, когда при создании экземпляра Type вместе со значком "*" заменяется на const char *?

Добавлено через 9 минут
Поспешил(qt creator старую версию запустил..) Когда items задан не как указатель - не работает.

Добавлено через 2 минуты
Такая ошибка: cannot convert 'const char**' to 'const char*' in assignment items = new Type [stacksize];

Добавлено через 31 минуту
Я кажется сообразил, когда мы динамически выделяем память, new вернет указатель

Добавлено через 3 минуты
А так как выделяется память под указатели, то в итоге получим указатель на указатели! И тогда правильно, что когда у нас Type заменится на const char *, то у items будет тип const char **

Добавлено через 23 минуты
Вообще это был очень тупой вопрос с моей стороны. Прошу прощения у тех кто прочитал и потратил свое время..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.08.2020, 00:47
Ответы с готовыми решениями:

Класс: создать класс Fraction для работы с дробными числами
Необходимо создать класс Fraction для работы с дробными числами. Число должно быть представлено двумя полями: целая часть – длинное целое...

Создать базовый класс - Array и производный класс - Money для работы денежной суммы
ПОМОГИТЕ, ПОЖАЛУЙСТА, С ЗАДАЧЕЙ Создать базовый класс - Array и производный класс - Money для работы денежной суммы

Как указать размер стэка в мб для программы на qt?
Как указать размер стека в мб для программы на qt? CMakeLists.txt. .pro файл.

2
фрилансер
 Аватар для Алексей1153
6442 / 5636 / 1127
Регистрация: 11.10.2019
Сообщений: 14,986
28.08.2020, 07:17
northcitizen, шаблоны поначалу всех в ступор вгоняют, поэтому не стесняйся с вопросами, лучше сразу разобраться, чем потом тупить ))

погляди вот эту лекцию (три видео), очень толково мужик рассказывает

1) https://www.youtube.com/watch?v=cweDEhW4VJk
2) https://www.youtube.com/watch?v=gAt0u9Ecwt8
3) https://www.youtube.com/watch?v=8BQgRdjgHSo

P.S. не осилил вставку с тегом [YOUTUBE][/YOUTUBE]
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.08.2020, 11:35
Цитата Сообщение от northcitizen Посмотреть сообщение
принципе в этом и вопрос. Почему его задали, как указатель?
Вероятно по тому что
Цитата Сообщение от northcitizen Посмотреть сообщение
данный шаблонный класс предназначен для работы с указателями.
сомнительное утверждение, редко когда затачивают шаблонный класс именно под указатели.
В принципе как и ошибочно пытаться использовать const char * :
C++
1
Stack<const char *> st(stacksize);
В С++ обычно используют std::string
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.08.2020, 11:35
Помогаю со студенческими работами здесь

Класс: Разработать класс для работы с матрицами(операции над матрицами)...
Добрый вечер, хочу попросить о помощи с отловом проблемы. Сама задача: разработать класс для работы с матрицами(операции над...

Проверить корректность кода работы с указателями
Всем добра! Есть тупой вопрос. Например, такая вот функция на C, которая должна что-то сделать с аргументом uint16_t *data, а точнее,...

Основы работы с указателями. Динамические массивы
Help me plz. Дан массив из N целых чисел. Найти непрерывную последовательность положительных чисел, сумма элементов которой максимальная...

Класс для работы с БД
Возникли трудности с разработкой сайта. Есть класс конфиг. class Config { protected $URL = &quot;&quot; ; // Url вашего...

Класс для работы с БД
Только начал учить ООП, нашёл пример &lt;?php public function Select() { $sql = &quot;SELECT name, email, msg FROM guestbook&quot;; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru