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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создание циклического алгоритма http://www.cyberforum.ru/cpp-beginners/thread206591.html
Гуры программирование помогите пожалуйста начинающему. Есть задача: Задано натуральное двухзначное число n. Среди чисел 1, 2, ... , n найти все такие, запись которых совпадает с последними цифрами...
C++ Отразить матрицу симметрично относительно побочной диагонали Никак не могу решить задачку: заполнить матрицу случайными числами, отобразить матрицу симметрично относительно побочной диагонали. вот, условие я задал, но как поменять местами части матрицы, не... http://www.cyberforum.ru/cpp-beginners/thread206590.html
C++ Массив алфавитном порядке
СРОЧНО!!! Задан массив из k символов латинского алфавита. Вывести на экран в алфавитном порядке все символы, которые входят в этот массив по одному разу. Нужно оформить в таком виде......
Найти минимальный элемент в столбце C++
Задача найти минимальный элемент в третьем столбце матрицы B(4,4). Вот кусок программы. Что не так немогу понять?? Помогите плз Bmin=100; for (i=0; i<4; i++) for (j=0; j<4; j++) if(B<Bmin)...
C++ Построить на экране кривую по заданному параметрическому уравнению. http://www.cyberforum.ru/cpp-beginners/thread206578.html
Построить на экране кривую по заданному параметрическому уравнению. Режим дисплея текстовый - 25 строк по 80 символов textmode (C80). График кривой выводить одним из текстовых символов. Таблица...
C++ никак не разберусь уже три раза переделывала.массив двумерный Из положительных значений двух целочисленных массивов сформировать общий массив, найти среднее арифметическое элементов расположенных в массиве после последнего совершенного числа.Создать функции для... подробнее

Показать сообщение отдельно
/*Alexander*/
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88

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

09.12.2010, 00:57. Просмотров 1238. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru