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

Сеттеры и геттеры в классах С++! - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.62
BART
 Аватар для BART
7 / 2 / 1
Регистрация: 17.11.2009
Сообщений: 116
17.05.2011, 21:18     Сеттеры и геттеры в классах С++! #1
Сдравствуйте!Не могли бы вы мне обьяснить зачем нужны сеттеры и геттеры в классах с++ и как их использовать в основной функции!Заранее спасибо!(очень прошу объяснение попроще)
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.05.2011, 21:22     Сеттеры и геттеры в классах С++! #2
http://ru.wikipedia.org/wiki/Setter
http://ru.wikipedia.org/wiki/Геттер_(программирование)
BART
 Аватар для BART
7 / 2 / 1
Регистрация: 17.11.2009
Сообщений: 116
17.05.2011, 21:24  [ТС]     Сеттеры и геттеры в классах С++! #3
это не совсем тот ответ которого я ждал, хотелось бы "живого" объяснения!
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.05.2011, 21:41     Сеттеры и геттеры в классах С++! #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот небольшой поясняющий код:

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
#include <iostream>
 
class Foo
{
public:
    Foo(int foo):
    m_foo(foo)
    {
    }
 
    void set_foo(int foo)
    {
        m_foo = foo;
    }
 
    int get_foo() const
    {
        return m_foo;
    }
 
private:
    int m_foo;
};
 
int main()
{
    Foo bar(10);
 
    std::cout << bar.get_foo() << std::endl;
 
    bar.set_foo(20);
 
    std::cout << bar.get_foo() << std::endl;
 
    return 0;
}
Есть некоторый класс Foo. Единственное его поле - переменная целого типа m_foo. Принцип инкапсуляции предполагает, что она должна быть скрыта, т.е. должна находиться в private-секции. Но мы хотим каким-то образом с ней работать, считывать её и устанавливать для неё новое значение. Для работы с ней мы используем сеттер/геттер.
Сеттер устанавливает переменную в некоторое новое значение. Для чего он нужен? Для того, чтобы мы не дай бог не занесли в переменную невалидное значение. Например, некоторый класс предполагает хранение только чётных чисел (пример синтетический, но понятный). Если бы поле m_foo было открыто, мы вполне могли бы написать bar.m_foo = 3. И таким образом занесли бы невалидные данные в объект (скажем, если все остальные методы основываются на предположении, что поле m_foo хранит именно чётное число, то при занесении в него нечётного числа они могут работать неверно, вплоть до того, что уронят программу). Используя же сеттер, мы можем прежде, чем приравнивать тройку полю m_foo, проверить её на чётность и, убедившись, что условие не выполняется, адекватно на это отреагировать.
Геттер же нужен, наоборот, для того, чтобы считать значение переменной. Ещё один синтетический пример. Например, нам нужно, чтобы при каждом обращении к переменной увеличивался счётчик считываний. При обращении bar.m_foo (если бы переменная находилась в открытой секции) мы бы упустили одно из таких обращений и счётчик не увеличили, при использовании же геттера мы наверняка знаем, что число обращений будет подсчитано правильно.
BART
 Аватар для BART
7 / 2 / 1
Регистрация: 17.11.2009
Сообщений: 116
17.05.2011, 23:12  [ТС]     Сеттеры и геттеры в классах С++! #5
О!Спасибо, это именно то что я искал!
Yandex
Объявления
17.05.2011, 23:12     Сеттеры и геттеры в классах С++!
Ответ Создать тему
Опции темы

Текущее время: 12:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru