Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
/*Alexander*/
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88
#1

паттерн Observer(непонятна строка кода) - C++

09.12.2010, 00:57. Просмотров 1236. Ответов 5
Метки нет (Все метки)

Непонятный код в одном месте. Хотелось бы узнать смысл и для чего его тут написали.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Subject {
    // 1. "independent" functionality
    vector < class Observer * > views; // Вот эта строка непонятна
    int value;
  public:
    void attach(Observer *obs) {
        views.push_back(obs);   // эта тоже . Функция не объявлена нигде а её вызывают.
    }
    void setVal(int val) {
        value = val;
        notify();
    }
    int getVal() {
        return value;
    }
    void notify();
};
А вот код всей проги:
Сама прога взята с сайта /*http://sourcemaking.com/ */ . Прога компелируется, но почемуто консоль не фиксируется.

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
#include<stdafx.h>
#include <iostream>
#include <vector>
using namespace std;
 
class Subject {
    // 1. "independent" functionality
    vector < class Observer * > views; // Вот эта строка непонятна
    int value;
  public:
    void attach(Observer *obs) {
        views.push_back(obs);   // эта тоже . Функция не объявлена нигде а её вызывают.
    }
    void setVal(int val) {
        value = val;
        notify();
    }
    int getVal() {
        return value;
    }
    void notify();
};
 
class Observer {
    // 2. "dependent" functionality
    Subject *model;
    int denom;
  public:
    Observer(Subject *mod, int div) {
        model = mod;
        denom = div;
        // 4. Observers register themselves with the Subject
        model->attach(this);
    }
    virtual void update() = 0;
  protected:
    Subject *getSubject() {
        return model;
    }
    int getDivisor() {
        return denom;
    }
};
 
void Subject::notify() {
  // 5. Publisher broadcasts
  for (int i = 0; i < views.size(); i++)
    views[i]->update();
}
 
class DivObserver: public Observer {
  public:
    DivObserver(Subject *mod, int div): Observer(mod, div){}
    void update() {
        // 6. "Pull" information of interest
        int v = getSubject()->getVal(), d = getDivisor();
        cout << v << " div " << d << " is " << v / d << '\n';
    }
};
 
class ModObserver: public Observer {
  public:
    ModObserver(Subject *mod, int div): Observer(mod, div){}
    void update() {
        int v = getSubject()->getVal(), d = getDivisor();
        cout << v << " mod " << d << " is " << v % d << '\n';
    }
};
 
int main() {
    int a;
    system("pause");
  Subject subj;
  DivObserver divObs1(&subj, 4); // 7. Client configures the number and
  DivObserver divObs2(&subj, 3); //    type of Observers
  ModObserver modObs3(&subj, 3);
  subj.setVal(14);
  system("pause");
  cin>>a;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2010, 00:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос паттерн Observer(непонятна строка кода) (C++):

Непонятна часть кода программы - работа с файлами - C++
Программа, выводящая символы из файла в обратном порядке. Часть кода: ..... std::ostringstream stream; stream &lt;&lt;...

Сравнить каждое слово с предыдущи. Непонятна работа кода - C++
Очень стыдно, но не могу не спросить. Вот код: string previous = &quot; &quot;; string current; while (cin &gt;&gt; current) { if (previous ==...

паттерн и строка C++ - C++
Возникла необходимость производить поиск в строке по паттерну, который может содержать символ '*' и '?'.Например: искать в строке &quot;abcdefg&quot;...

Строка кода - C++
Можно ли как-то выяснить номер строки, на которой написан код? Допустим: void main() { printf(&quot;Hello\n&quot;); printf(&quot;This is...

Пропускается строка кода - C++
Здравствуйте. Есть такой код: #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &lt;string&gt; #include &lt;iostream&gt; using namespace...

Не ясная строка кода из учебника - C++
Доброго вечера, учу СИ++ по книге Стивена Праты и не могу понять одну строку кода. Тут простое объявление класса Class Stock{ ...

5
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
09.12.2010, 01:06 #2
/*Alexander*/, Читайте про вектор, Сэр. А потом лезьте в паттерны. Изучите STL для начала.

Добавлено через 2 минуты
vector < class Observer * > views; // Вот эта строка непонятна
Объявляется вектор указателей на Observer с именем views.
void attach(Observer *obs) {
views.push_back(obs); // эта тоже . Функция не объявлена нигде а её вызывают.
Вызывается стандартная функция вектора push_back по названию можно понять что она делает. Ну и добавляет она в вектор указатель на Observer.
Ну и для окончания.Вектор
1
/*Alexander*/
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88
09.12.2010, 02:02  [ТС] #3
ДА спосибо этот ответ. Это твоя ссылка (там зазобраться долговато, нет пока времени). Здавать завтро. Ты скажешь почему так плохо отнёсся к теме. Тему паттерны должны изучать только в следующем семе, не говаря уже про как ты сказал вектор, От тебя первый раз услышал.


Что эта функция возвращает????

Добавлено через 10 минут
ForEveR, Скажи программа сама раскравает суть паттерна Observer

Добавлено через 3 минуты
ForEveR, Почему консоль сразу исчезает, после вызова. Я даже написал system("pause") и нихрена.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
09.12.2010, 07:53 #4
/*Alexander*/, Не знаю. У меня не закрывается. В паттерны я не лезу. Я нормально отнесся к теме, просто изучать нужно более-менее последовательно, как ни странно.
push_back не возвращает ничего. Она добавляет элемент в конец контейнера...
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
09.12.2010, 10:27 #5
Согласен с тов. ForEveR. В другой теме я тебе уже писал, что если программировать правильно, то получатся паттерны, а если программировать паттернами, то не факт, что получится правильно.
Тебе сейчас надо не паттерны изучать, а алгоритмы.
1
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.12.2010, 12:39 #6
Цитата Сообщение от volovzi Посмотреть сообщение
если программировать правильно, то получатся паттерны, а если программировать паттернами, то не факт, что получится правильно
Золотые слова!
0
09.12.2010, 12:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2010, 12:39
Привет! Вот еще темы с ответами:

Что значит это строка кода? - C++
int _tmain(int argc, _TCHAR* argv) Объясните пожалуйста что значит этот участок кода, или дайте ссылку на какой либо ресурс для...

Разбор кода: fscanf и форматная строка - C++
Добрый день! Необходимо разобраться в коде, в нем есть такие строки: h = fscanf(baza, &quot;%*s %d&quot;, &amp;kod1); h = fscanf(baza, &quot;%*c %d...

Непонятна ошибка - C++
Программа выдает совсем не то что надо, а исправить не как не получаеться. Помогите кто может. // telefon.cpp: определяет точку входа...

Написать, что значит каждая строка кода - C++
1. Условие: Среднюю группу детского сада вывели на прогулку. Сколько девочек и сколько мальчиков видно из-за забора, если рост мальчиков...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru