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

Запрещение переинициализации public-поля как члена класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перед каждым вторым отрицательным значением в массиве вставить нулевое значение http://www.cyberforum.ru/cpp-beginners/thread1213220.html
Дан вещественный массив. Перед каждым вторым отрицательным значением в вещественном массиве вставить нулевое значение.
C++ Найти среднее квадратическое для положительных элементов матрицы, стоящих на парных местах Задано одномерная матрица А(10).Розщитать среднее квадратическое для положительных элементов,что стоят на парныъ местах . http://www.cyberforum.ru/cpp-beginners/thread1213208.html
Бинарные деревья C++
Компилятор выдаёт ошибки в 9, 10 и 12, 13 строках: invalid conversion from 'int' to 'sNode*' Подскажите пожалуйста, что не так. struct sNode { int value; sNode *left; sNode *right; }; int Proizved (sNode *node) { if(node == 0) return 0; if(node->left)
Вычисление функции разложением в ряд C++
Помогите пожалуйста, не могу добиться корректной работы проги. Задание: Для динамического одномерного массива X из N (0<N≤20) элементов составить алгоритм и программу (консольное приложение на Си) нахождения суммы ряда с заданной точностью E (0<E<0.1) для каждого из элементов X. Использовать рекуррентные соотношения при вычислении очередного члена ряда. Вычисление суммы Sum(Xi)...
C++ Рассчитать стоимость покупки с учетом скидки http://www.cyberforum.ru/cpp-beginners/thread1213164.html
Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 3% предоставляется, если сумма покупки больше 500 руб, в 5% — если сумма больше 1000 руб. Ниже приведен рекомендуемый вид экрана во время выполнения программы (данные, введенные пользователем, выделены полужирным шрифтом). Вычисление стоимости покупки с учетом скидки.
C++ Записи. Выяснить в сколько строке символов-разделителей (пробелов, точек, тире, запятых ит.д.) Дана фраза. Выяснить, сколько в ней символов-разделителей (пробелов, точек, тире, запятых ит.д.) подробнее

Показать сообщение отдельно
Avazart
Заблокирован
21.06.2014, 01:48     Запрещение переинициализации public-поля как члена класса
C++
1
Button.onPress += myHandler;
Именно так не выйдет, точнее сказать так не принято в С++, ибо в С++ нет свойств, всё через геттеры и сетторы, поэтому будет выглядеть как-то так:
C++
1
Button.addOnPress(myHandler);
И то что приведено в первом посте ошибочно
C++
1
2
public:
    B field;
Открытых членов не должно быть, опять же через сеттеры/геттеры.

Добавлено через 27 минут
Приблизительно так:
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
#include <iostream>
#include <vector>
#include <string>
 
class Object
{
    public:
        virtual std::string className(){ return "Object"; };
        virtual ~Object(){};
};
 
typedef void (*Function)(Object* obj);
 
void f1(Object* sender)
{
    std::cout<<sender->className()<<": f1()"<<std::endl;
}
 
void f2(Object* sender)
{
    std::cout<<sender->className()<<": f2()"<<std::endl;
}
 
template <typename FunctionT>
class Event
{
    public:
        void addFunction(FunctionT function)
        {
            if(function)
                functions_.push_back(function);
        }
 
        void invoke(Object* sender)
        {
            for(size_t i=0; i<functions_.size(); ++i)
                 functions_[i](sender);
        }
 
    private:
        std::vector<FunctionT> functions_;
};
 
class Button: public Object
{
    public:
 
        virtual std::string className(){ return "Button"; };
 
        void addOnPress(Function f)
        {
            event_.addFunction(f);
        }
 
        void press()
        {
             event_.invoke(this);
        }
 
    private:
        Event<Function> event_;
};
 
int main()
{
    Button button;
 
    button.addOnPress(f1);
    button.addOnPress(f2);
 
    button.press();
 
    getchar();
    return 0;
}
 
Текущее время: 03:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru