|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.07.2010, 20:56 | #1 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
Как обычно делаются такие локальные переменные в методах классов?
Мне нужно в одном из методов класса сделать локальную переменную, которая бы сохраняла свое значение между вызовами данного метода. Причем необходимо сделать так, чтобы эта переменная была локальной для каждого объекта данного класса; из-за этого требования отпадает вариант с использованием локальных статических переменных. Делать такую переменную переменной-членом класса тоже, вроде бы, - неверно, т.к. она не относится к описанию состояния объекта класса. В общем, хотелось бы узнать: как обычно делают такие переменные? Поделитесь, плиз, опытом...
|
10.07.2010, 21:01 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Если эта переменная сохраняет значение между вызовами метода, значит она хранит состояние объекта и должна быть описана как член класса. Другого не дано. Разве что перепроектировать класс, чтобы не требовалась эта переменная.
|
10.07.2010, 21:05 | #3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
приватный член класса.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
10.07.2010, 21:15 | #4 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
Благодарю за ответы. Я тоже все больше склоняюсь сделать эту переменную членом класса, т.к. других вариантов не вижу. Однако, в этом случае, данная переменная перестает быть локальной и становится доступной всем методам данного класса, а это не есть гуд... Странно, что в C++ не предусмотрены такие локальные переменные.
Последний раз редактировалось Oleg_SK; 10.07.2010 в 21:18. |
10.07.2010, 22:42 | #5 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Я так на вскидку не придумаю ситуацию, когда такие локальные переменные могли бы понадобиться. Если эта переменная не хранит состояние объекта класса и используется в одном единственном методе, то может методу не место в классе и он должен быть функцией?
Реализация таких переменных проблематична и излишне усложняет ООП. Нужно вводить что-то вроде контекста выполнения, передавать этот контекст, разрешать выполнение определенных участков кода/доступ к переменным только в определенном контексте,... Сложно и не особо нужно, как мне кажется. |
11.07.2010, 02:49 | #6 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
Возник еще один вопрос: как в обычной функции сделать локальную переменную сохраняющую свое значение между вызовами, при следующих условиях:
эта функция используется в многопоточной программе и вызывается множеством потоков. Требуется сделать так, чтобы значение этой локальной переменной могло быть уникальным для каждого потока вызывающего данную функцию. То есть в функции нужна как бы статическая локальная переменная, значение которой было бы локальным для каждого потока выполнения вызывающего данную функцию. Можно конечно (по крайней мере, в Win32-приложениях), если мне память не изменяет, сохранять такие данные в TLS, но тогда они станут доступными всему коду выполняющемуся в данном потоке, а не только конкретной функции... Последний раз редактировалось Oleg_SK; 11.07.2010 в 04:01. |
11.07.2010, 03:31 | #7 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
Проcьба к модератору: плиз, удалите этот пост и переименуйте эту тему с "Как обычно делаются такие локальные переменные в методах классов?" в "Как обычно делают такие локальные переменные?", т.к. вопросы в ней уже касаются не только классов.
Последний раз редактировалось Oleg_SK; 11.07.2010 в 03:44. |
11.07.2010, 04:03 | #8 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
Код:
|
|
11.07.2010, 04:09 | #9 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
netrino, благодарю! Вы просто читаете мои мысли; как раз хотел спросить: как заставить компилятор сохранять статические локальные переменные в TLS, а вы уже ответили...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Объясните. Ну не понимаю я как сайты на си делаются? | newprog12 | Общие вопросы C/C++ | 16 | 25.01.2010 10:46 |
как отформатировать локальные диски??? | alex(21) | Операционные системы общие вопросы | 8 | 11.11.2009 09:56 |
Маршрутизация.Как юзать локальные ресурсы? | Zerone | Свободное общение | 10 | 06.10.2009 19:27 |
Локальные и глобальные переменные. | Proger10 | Общие вопросы Delphi | 1 | 04.05.2009 05:55 |
как делаются содержания | trunx | Microsoft Office Word | 17 | 01.12.2008 23:57 |