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

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

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

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

09.12.2010, 00:57. Просмотров 1207. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2010, 00:57     паттерн Observer(непонятна строка кода)
Посмотрите здесь:

Непонятна часть кода программы - работа с файлами - 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{ ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.12.2010, 01:06     паттерн Observer(непонятна строка кода) #2
/*Alexander*/, Читайте про вектор, Сэр. А потом лезьте в паттерны. Изучите STL для начала.

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


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

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

Добавлено через 3 минуты
ForEveR, Почему консоль сразу исчезает, после вызова. Я даже написал system("pause") и нихрена.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.12.2010, 07:53     паттерн Observer(непонятна строка кода) #4
/*Alexander*/, Не знаю. У меня не закрывается. В паттерны я не лезу. Я нормально отнесся к теме, просто изучать нужно более-менее последовательно, как ни странно.
push_back не возвращает ничего. Она добавляет элемент в конец контейнера...
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
09.12.2010, 10:27     паттерн Observer(непонятна строка кода) #5
Согласен с тов. ForEveR. В другой теме я тебе уже писал, что если программировать правильно, то получатся паттерны, а если программировать паттернами, то не факт, что получится правильно.
Тебе сейчас надо не паттерны изучать, а алгоритмы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2010, 12:39     паттерн Observer(непонятна строка кода)
Еще ссылки по теме:

Что значит это строка кода? - 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. Условие: Среднюю группу детского сада вывели на прогулку. Сколько девочек и сколько мальчиков видно из-за забора, если рост мальчиков...


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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4961 / 3037 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.12.2010, 12:39     паттерн Observer(непонятна строка кода) #6
Цитата Сообщение от volovzi Посмотреть сообщение
если программировать правильно, то получатся паттерны, а если программировать паттернами, то не факт, что получится правильно
Золотые слова!
Yandex
Объявления
09.12.2010, 12:39     паттерн Observer(непонятна строка кода)
Ответ Создать тему
Опции темы

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