Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/32: Рейтинг темы: голосов - 32, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 17

Инкапсулировать без серьезного изменения..возможно ли?

07.02.2011, 22:15. Показов 8194. Ответов 90
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
 
 
class list_block
{
    private:
 
        string data;
    public:
        list_block* next;
 
        string get_data() const {return data;}
        void set_data(string new_data){data=new_data;}
        void set_next(list_block* new_next) {next=new_next;}
 
        list_block(list_block* new_next) {set_next(new_next);}
};
 
 
class circle_list
{
    protected:
        list_block* first;
        list_block* second;
 
 
    public:
        circle_list();
        circle_list(string* strings, int n);
        circle_list(circle_list& list);
        ~circle_list();
 
        int size() const;
        void show() const;
        void push(string);  // chtob realizovat
                            //konstruktor s parametrom
                            //prishlos zasunut' push suda
};
 
 
 
 
 
 
circle_list::circle_list()
{
 
    first=new list_block(NULL);
    first->set_data("start");
    second=new list_block(first);
    second->set_data("end");
 
    first->set_next(second);
}
 
circle_list::circle_list(string* strings, int n)
{
    first=new list_block(NULL);
    first->set_data("start");
    second=new list_block(first);
    second->set_data("end");
 
    first->set_next(second);
    for (int i=0;i<n;i++) push(*(strings+i));
}
 
circle_list::circle_list(circle_list& list)
{
    first=new list_block(NULL);
    first->set_data("start");
    second=new list_block(first);
    second->set_data("end");
 
    first->set_next(second);
 
    list_block* block=list.first;
    int size=list.size()+2;
 
    for (int i=0;i<size-2;i++) block=block->next;
 
    while (block->get_data()!="start")
    {
        push(block->get_data());
        for (int i=0;i<size-1;i++) {block=block->next;}
    }
}
 
circle_list::~circle_list()
{
    list_block* block=first;
    list_block* block1=first;
    while (block->get_data()!="end")
    {
        block1=block->next;
        delete block;
        block=block1;
    }
    delete block;
    block=NULL;
    block1=NULL;
}
 
int circle_list::size() const
{
    list_block* block=first;
    if (block->next->get_data()=="end") return 0;
    int i=0;
 
    do
    {
        i=i+1;
        block=block->next;
    }
    while (block->next->get_data()!="end");
    return i;
}
 
void circle_list::show() const
{
    list_block* block=first->next;
    cout <<"Elementi:"<<endl;
    while (block->get_data()!="end")
    {
        cout << block->get_data() << endl;
        block=block->next;
    }
}
 
void circle_list::push(string st)
{
    list_block* new_block=new list_block(second);
    new_block->set_data(st);
    second=new_block;
    first->set_next(new_block);
}
 
 
 
 
 
class quene : public circle_list
{
    public:
        quene():circle_list(){};
        quene(string* strings, int n):circle_list(strings,n){};
        quene(quene& list):circle_list(list){};
 
        string deleter();
 
        void deleter(int n) {for (int i=0;i<n;i++) deleter();}
        void deleter_all() {deleter(size());}
        string push_pop(string st){push(st); return deleter();}
 
 
};
 
string quene::deleter()
{
    list_block* block=first;
    while (block->next->get_data()!="end")
        {
            block=block->next;
        }
    list_block* old_next=block->next;
    string res=block->get_data();
    block->next=block->next->next;
    block->set_data("end");
    delete old_next;
    return res;
}
 
int main()
{
    string str[3]={"Inna","Masha","Julja"};
    quene VASA(str,3);
    cout << "...sozdaem klass VASA s devchenkami *Julja*,*Masha*,*Inna*"<< endl;
    VASA.show();
    cout << endl;
    getchar();
 //----
    quene VASA1(VASA);
    cout << "...sozdaem klass VASA_1 kotorij bliznec VASA i kortorij sebe skopiroval devchenok"<< endl;
    VASA1.show();
    cout << endl;
    getchar();
 //----
    cout << "__teper VASJU brosila " << VASA.push_pop("Julja")<<". Potomu chto on mudak!"
 
            <<" Zato Julja za kanikuli potolstela i teper za dvoih"<< endl;
    VASA.show();
    cout << endl;
    getchar();
  //----
    cout << "i u VASi_1 stalo bloshe devchonok chem u VASI.";
    VASA1.show();
    cout << endl;
    getchar();
  //----
    cout << "I chtob bilo chesno, VASJU_1 tozhe brosit " << VASA1.push_pop("Julja")<< endl;
    VASA1.show();
    cout << endl;
    getchar();
  //----
    string str1[0]={};
    quene Julik;
    cout << "...no tut pojavilsja Julik..holostjak"<< endl;
    Julik.show();
    cout << endl;
    getchar();
  //----
    cout << "__i Innochka stala s Julikom"<< endl;
    Julik.push("Innochka");
    Julik.show();
    cout << endl;
    getchar();
   //----
    cout << "..no potom vdrug ona ego brosila (("<< endl;
    Julik.deleter();
    Julik.show();
    cout << endl;
    getchar();
    //----
    cout << "__a potom opjat' vernulas'"<< endl;
    Julik.push("Innochka");
    Julik.show();
    cout << endl;
    getchar();
   //----
    cout << "..no potom opjat', zaraza, brosila (("
            << endl << "I Julik ostalsja sovsem odin" << endl;
    Julik.deleter_all();
    Julik.show();
    cout << endl;
    getchar();
   //----
    cout << "VIVOD PR2:  INNOCHKA BALBES!!!!"<< endl;
    system("pause");
    return 0;
}

собственно это кольцевая очередь, на которой у меня построено уже 4 след лабы.Пошел сегодня сдавать - препод ткнул рукой в не инкапсулированный
public:
list_block* next;
из
class list_block в самом начале. И говорит, пока не перепишешь все так, чтоб он был в привате - не приму. А там куча операций присваивания и считывания через (->) из class circle_list и его сына quene.
Причем фрэнды использовать запретила. НА все мои возражения только кивает *овца((
Во общем, как малой кровью вбахать эту глупость в приват и иметь к ней нормальный доступ отовсюду? что не переписывать еще 5 таких лаб в хз скольких меcтах ?..
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.02.2011, 22:15
Ответы с готовыми решениями:

Событие изменения содержимого страницы без изменения адреса и перезагрузки страницы
Доброго времени суток! Такая проблема имеется: есть форма на определенном сайте (сам сайт, к сожалению показать не могу), на которой по...

Возможно ли изменения счётчика
Доброго времени суток ! Возможно странный вопрос. Имеется текущая база и архив. Как только я переношу данные из текущей в архив. И в...

Возможно ли в IDLE применить изменения, не закрывая всех окон?
Добрый день. Пишу свой модуль. Для этого использую IDLE. И, т.к. опыта маловато, практически после каждого изменения запускаю тестовые...

90
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
10.02.2011, 08:08
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от volovzi Посмотреть сообщение
на мои вопросы кто-нибудь ответит
volovzi, на какие конкретно? Хоть одного внятного вопроса, я, например, не вижу.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
10.02.2011, 09:45

Не по теме:

Цитата Сообщение от 124bit Посмотреть сообщение
Класс спроэктирован правильно, просто есть куча других классов которые его используют, не так как хочет перпод, а напрямую. И я таки считаю, что инкапсуляцию я выполняю верно
"... Да я и сам могу, но у меня правильнописание хромает. Оно хорошее, но почему-то хромает." (с) Винни Пух


Да поймите, это не "препод так хочет", это Вам говорят, как должно быть. Так, что, прийдётся Вам переписывать всю Вашу "кучу кода"...
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
10.02.2011, 12:50
CyBOSSeR, Я уже пятую страницу прошу, чтобы кто-нибудь из комментаторов объяснил, чем плохи открытые переменные.

 Комментарий модератора 
Прислушайтесь к совету, будьте вежливее.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.02.2011, 13:26
volovzi, во-первых, повежливее. Не зарывайтесь.
Во-вторых, вам уже пятую страницу отвечают, что это плохой тон программирования. Класс должен содержать закрытые данные (шестерёнки) и открытые методы - рычаги. Нельзя позволять пользователю ковыряться в шестерёнках, а то мотор в лучшем случае заглохнет, в худшем - взорвётся.
0
34 / 34 / 8
Регистрация: 07.06.2010
Сообщений: 118
10.02.2011, 13:46
124bit, узко мыслите исправление вашего кода это рутинная операция, замена next на get_next()
стоит подумать об автоматизации этого процесса. Вот набросал код, везде где встретит ->next заменяет на ->get_next() :
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
#include <fstream>
#include <string>
#include <iostream>
 
#define TARGET "->next"
#define SAMPLE "->get_next()"
 
int main()
{
    std::ifstream fin("input.cpp");
    if(!fin)
    {
        std::cerr << "Cannot open file!\n";
        return 1;
    }
 
    std::ofstream fout("output.cpp");
    std::string buf;
 
    while( !fin.eof() )
    {
        std::getline(fin,buf);
        std::cout << buf << std::endl;
        if(buf.empty())
            continue;
 
        int offset=0;
 
        while( (offset = buf.find(TARGET)) != -1 )
        {
            buf.erase(offset, strlen(TARGET));
            buf.insert(offset,SAMPLE);
        }
 
        fout << buf << std::endl;
    }
    return 0;
}
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.02.2011, 13:47
[Freeman], такой код за вас набросали разработчики любого более-менее приличного текстового редактора. Вызывается обычно по Ctrl+R.
0
10.02.2011, 13:53

Не по теме:

У меня только блокнот:D
В блокноте это ctrl + H.

0
10.02.2011, 13:56

Не по теме:

[Freeman], в блокноте такая функция тоже имеется :D

0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
10.02.2011, 16:12
Цитата Сообщение от silent_1991 Посмотреть сообщение
volovzi, во-первых, повежливее. Не зарывайтесь.
Вежливее не получается, потому что вы все нагло игнорируете мои комментарии и продолжаете впаривать новичку ерунду.

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

Класс должен содержать закрытые данные (шестерёнки) и открытые методы - рычаги.
Вот это «должен» я и прошу доказать. Если нет доказательства, то утверждение априори неверно.

Нельзя позволять пользователю ковыряться в шестерёнках, а то мотор в лучшем случае заглохнет, в худшем - взорвётся.
А к этому мы вернёмся позже, если ты сможешь ответить на предыдущие вопросы.
0
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
10.02.2011, 16:58
а что доказывать, все что не нужно знать внешнему миру пихаем в черный ящик. Можно вообще все в паблике написать, тогда классы зачем?
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
10.02.2011, 17:08
Лучший ответ Сообщение было отмечено как решение

Решение

volovzi, тебе никто ничего не должен, пиши как знаешь
4
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.02.2011, 18:18
volovzi, а то, что небо голубое, вам тоже доказать надо? Или то, что по руке топором бить не надо? Это просто так есть, это правильно, а значит надо делать так. Можно по-разному делать, но лучше делать правильно.
1
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
10.02.2011, 23:16
Цитата Сообщение от alex_x_x Посмотреть сообщение
volovzi, тебе никто ничего не должен, пиши как знаешь
Цитата Сообщение от silent_1991 Посмотреть сообщение
volovzi, а то, что небо голубое, вам тоже доказать надо? Или то, что по руке топором бить не надо? Это просто так есть, это правильно, а значит надо делать так. Можно по-разному делать, но лучше делать правильно.
Собственно, что я и ожидал — доказать свою точку зрения вы не способны, поэтому выкручиваетесь как можете. Абсурд ситуации в том, что говоря об обязательном закрытии переменных класса вы ссылаетесь на авторитеты (СБШ) и какие-то законы природы (типа «это правильно»), но при этом у авторитетов-то, как раз, по-другому, а «закон природы» нигде никогда и никем не был сформулирован.

Таким образом вы противоречите сами себе, следовательно, ваши утверждения неверны.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.02.2011, 23:18
volovzi, странный вывод. Докажите обратное (что правильно делать так, как говорите вы).
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
10.02.2011, 23:22
volovzi, есть опыт и здравый, но эти категории неформализуемые

Цитата Сообщение от volovzi Посмотреть сообщение
Таким образом вы противоречите сами себе, следовательно, ваши утверждения неверны.
учите логику, логическое следование тащемта работает не так

и кстати, на govnokod.ru я уверен у вас найдется много единомышленников
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.02.2011, 23:22
Вообще говоря, вы хотите, чтобы в классе были открыты некоторые жизненно важные для всего контейнера данные. Открыты для общего пользования! Это противоречит всем канонам ООП (данные не сокрыты - значит, любой желающий может всё поломать одним неверным движением). Что ещё доказывать - честно, я не знаю.
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
10.02.2011, 23:33
silent_1991, это типичный «аргумент» религиозного спора: докажи, мол, что бога нет.
Доказывать должен тот, кто высказывает положительное утверждение о существовании, правильности и т.п. Я не делал никаких утверждений о правильности какого-либо метода, а только опроверг другое утверждение, поэтому не должен ничего доказывать.

Но если тебе интересно, то я утверждаю, что модификаторы доступа к переменным зависят от назначения и, если угодно, от сложности внутреннего устройства класса.
Если не нужно никак фильтровать значения или проводить дополнительные операции при изменении значений переменных, то не нужно плодить лишние сущности (сет-гет), а нужно просто сделать их открытыми. Как это сделано в классе «std::pair» или как это часто делается в узлах различных контейнеров (деревьев, списков и т.п.).

Добавлено через 3 минуты
Цитата Сообщение от alex_x_x Посмотреть сообщение
volovzi, есть опыт и здравый, но эти категории неформализуемые


учите логику, логическое следование тащемта работает не так

и кстати, на govnokod.ru я уверен у вас найдется много единомышленников
Здесь комментарии излишни, иди читай всё заново.

Цитата Сообщение от silent_1991 Посмотреть сообщение
Это противоречит всем канонам ООП.
Вот покажи мне эти каноны.
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
10.02.2011, 23:34
volovzi, представьте себе следующее: у вас есть склад на котором хранят товары разные фирмы. Товары ставятся на места краном. Вы будете позволять водителям приезжающих от фирм грузовиков кататься на кране по вашему складу в поисках хорошего места? Или главбуху? Или охраннику? Нет. Это должен делать только оператор крана, т.к. у него соответствующая квалификация, а другие устроят армагеддон и денег вы не заработаете. Также и в ООП. И это не прихоть отдельных лиц, а здравый смысл.
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
10.02.2011, 23:35
Predator_2004, прочитай предыдущее сообщение ещё раз.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.02.2011, 23:37
Понятно, очередной Напильнег.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2011, 23:37

Возможно Ли Внести Изменения В Дизайн Только Конкретных Почтовых Баз
Доброго времени суток! Возможно ли внести изменения в дизайн только конкретных почтовых баз или только в ntf-шаблоны...?...Вопрос возник по...

Не удалось запустить Windows. Возможно это произошло из-за недавнего изменения оборудования
Добрый день! Возникла проблема при запуске следующего характера: Не удалось запустить Windows. Возможно это произошло из-за недавнего...

Инкапсулировать класс
Помоги пожалуйста передалать класс на работу с аксессорами using System; using System.Collections.Generic; using System.Linq; ...

Веб-программист для серьезного проекта
Всем привет! Я создаю серьезный проект, и сейчас собираю команду для реализации.. Человек должен владеть php или js (не нужны супер...

нужны специалисты для серьезного проекта
Добрый день. Нужны специалисты для создания проекта похожего на epochta.Ru. Кто готов осилить? Или посоветовать кого нибудь.


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

Или воспользуйтесь поиском по форуму:
60
Закрытая тема Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru