Форум программистов, компьютерный форум CyberForum.ru

Работа с указателями в ООП - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ решите задания по массивам http://www.cyberforum.ru/cpp-beginners/thread155013.html
1. Вывести на печать все слова, составляющие не более чем из пяти букв. 2. Преобразовать строчную букву в заглавную русского алфавита с А до Б 3. Для матрицы n*m ,n меньше или равно 10, m меньше или равно 15 и в этой матрице исключить все строки,соединяющее нулевые элементы СПАСИБО!
C++ Работа с sql таблицами в c++ Здравствуйте. Возникла следующая задача: есть sql таблица на несколько тысяч строк. Нужно выбрать из нее необходимые данные, обработать и записать новую таблицу с результатом. Методы для обработки данных уже написаны на с++. Нужно реализовать чтение, выборку и запись. К сожалению, я очень мало сталкивался с обработкой файлов и никогда - с sql. Подскажите, пожалуйста, в каком направлении копать. http://www.cyberforum.ru/cpp-beginners/thread154980.html
как реализовать перегрузку опрератора "="? C++
есть класс Base: class Base { private: ... //переменные public: Base(...); //конструктор virtual Base operator=(Base d); } и класс Derived
Работа с файлами и строками. C++
Прошу помочь с этой задачкой, ибо СИ дается почему-то сложнее Паскаля, а темы на файлы, по-моему, самые сложные. Очень нужно. В общем задание: Дан символьный файл f. Группы символов, разделенные пробелами(одним или несколькими) и не содержащие пробелов внутри себя, будем называть "словами". Удалить из файла все однобуквенные(например: "gggg","yy" ) слова и лишние пробелы. Результат записать в...
C++ Нарисовать квадрат http://www.cyberforum.ru/cpp-beginners/thread154945.html
Задача Написать программу, которая выводит на экран - следующую фигуру: ************* * * * * * * * * * *
C++ Реализация функции Substring с помошью указателей Доброго времени суток! Решил реализовать функцию Substring в C++, с делал это так: char* SubString(char* str, int index, int length) { char resChar = ""; for(int j = index; j < (index + length); j ++) { char c ; wsprintf(c, "%c", str); подробнее

Показать сообщение отдельно
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.07.2010, 20:22     Работа с указателями в ООП
Столкнулся впервые с указателями, используемыми в подобном примере. Для них не нужно задавать максимальное кол-во элементов, правильно понимаю? В коде выделил курсивом вопросы, относящиеся к пониманию процесса работы с указателями. Кто имеет время 10 - 15 минут, ответьте, пожалуйста, на вопросы достаточно глубоко для правильного понимания. Спасибо

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <iostream>
#include <cstdlib>
#include <cctype>
using namespace std;
 
class list {
public:
    list *head; //указатель на начало списка
    list *tail; // указатель на конец списка
    list *next; // указатель на следующий элемент списка
    int num;    // число для хранения
 
    list() { head = tail = next = NULL; }
    virtual void store(int i) = 0;
    virtual int retrieve() = 0;
};
 
//создание списка типа очередь
class queue : public list {
public:
    void store(int i);
    int retrieve();
};
 
void queue::store(int i)
{
    list *item;
 
   [B] item = new queue;[/B] // [I]сколько памяти выделятеся, и как возможно преобразование от list  к queue?[/I]
    if(!item) {
        cout << "Ошибка выделения памяи\n";
        exit(1);
    }
    item->num = i;
 
    //добавление элемента в конце списка
    if(tail) tail->next = item;
   [B] tail = item;[/B]//[I] зачем приравнивание опять?[/I]
   [B] item->next = NULL;[/B] // [I]зачем эта строчка[/I]
    [B]if(!head) head = tail[/B];// [I]и что делает ф-но эта инструкция?[/I]
}
 
int queue::retrieve()
{
    int i;
    list *p;
 
    if(!head) {
        cout << "Список пуст\n";
        return 0;
    }
 
    // удаление элемента из начала списка
   [B] i = head->num;[/B] // [I]хотя номер добавлялся в tail->next[/I]
    [B]p = head[/B]; // [I]зачем нужен p?[/I]
    head = head->next;
    delete p;
 
    return i;
}
 
// stack
class stack : public list {
public:
    void store(int i);
    int retrieve();
};
 
void stack::store(int i)
{
    list *item;
 
    item = new stack;
    if(!item) {
        cout << "Ошибка выделения памяти\n";
        exit(1);
    }
    item->num = i;
 
    // добавление элемента в начало списка
  [B]  if(head) item->next = head; [/B]// что значит эта инструкция?
    head = item;
    if(!tail) tail = head;
[I]// в частности ф-ция store для стэка, что происходит?[/I]
}
 
int stack::retrieve()
{
    int i;
    list *p;
 
    if(!head) {
        cout << "\n";
        return 0;
    }
 
   
    i = head->num;
    p = head;
    head = head->next;
    delete p;
 
    return i;
}
 
int main()
{
    list *p; 
 
   
    queue q_ob; 
    p = &q_ob; //
 
    p->store(1); 
    p->store(2); 
    p->store(3); 
 
    cout <<  : ";
    cout << p->retrieve();
    cout << p->retrieve();
    cout << p->retrieve();
 
    cout << '\n';
 
    // äåìîГ*Г±ГІГ°Г*öèÿ Г±ГІГҐГЄГ*
    stack s_ob; 
    p = &s_ob; // 
    p->store(1); 
    p->store(2); 
    p->store(3); 
 
    cout << ": ";
    cout << p->retrieve();
    cout << p->retrieve();
    cout << p->retrieve();
 
    cout << '\n';
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru