Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2007, 08:23   #1
Дмитрий_Ч
 
Регистрация: 26.09.2007
Сообщений: 9
По умолчанию Статичиские функции класса

Создается класс, содержащий статическую функцию-член. Далее в программе создается несколько объектов этого класса. При обращении разные объектов к это статиской функции будет вызываться одна и таже функция или , всетаки, у каждого объекта будет свой экземпляр?
Дмитрий_Ч вне форума Ответить с цитированием
Старый 01.10.2007, 11:54   #2
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

скажу по секрету, что и нестатические функции находятся в одном экземпляре. просто им вначале передается указатель на объект, откуда ты их вызываешь. а статическим такой указатель не передается
Alek86 вне форума Ответить с цитированием
Старый 01.10.2007, 13:15   #3
Дмитрий_Ч
 
Регистрация: 26.09.2007
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Alek86 Посмотреть сообщение
скажу по секрету, что и нестатические функции находятся в одном экземпляре. просто им вначале передается указатель на объект, откуда ты их вызываешь. а статическим такой указатель не передается
тогда при обращении нескольких объектов к одной функции, данные, обрабатываемой этой функцией, могут быть испорчены.
например, объект1 с помощью этой функции записывает в файл1, а объект2 - в файл2
Дмитрий_Ч вне форума Ответить с цитированием
Старый 01.10.2007, 18:29   #4
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

Цитата:
например, объект1 с помощью этой функции записывает в файл1, а объект2 - в файл2
и?

ЗЫ. уточни, какой "этой"? статические функции не могут обращаться к нестатическим данным.
а нестатичекие - та на здоровье! будет именно так, как ты говоришь...
Alek86 вне форума Ответить с цитированием
Старый 02.10.2007, 11:01   #5
Дмитрий_Ч
 
Регистрация: 26.09.2007
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Alek86 Посмотреть сообщение
и?

ЗЫ. уточни, какой "этой"? статические функции не могут обращаться к нестатическим данным.
а нестатичекие - та на здоровье! будет именно так, как ты говоришь...
Задача такая. Пишу класс для работы с COM портом. Чтение порта асинхронное и осуществляется в отдельном потоке. Не могу решить как реализовать функцию потока: как функцию-член класса или как отдельную функцию. Неопределенность вызвана тем, что может появиться необходимость создать несколько объектов этого класса для работы одновременно с несколькими COM портами одновременно.
Дмитрий_Ч вне форума Ответить с цитированием
Старый 02.10.2007, 11:20   #6
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

еще раз. статическая функция отличается от обычной только тем, что она может использовать статические переменные-члены класса. ну, и еще областью видимости.
так что тут большой разницы нет
Alek86 вне форума Ответить с цитированием
Старый 02.10.2007, 14:41   #7
Дмитрий_Ч
 
Регистрация: 26.09.2007
Сообщений: 9
По умолчанию

Это я знаю. Еще она отличается тем, что она существует уже до создания объекта класса. И к ней также можно обратиться по имени класса, а не по имени объекта. Но что произойдет, когда я создам два объекта класса, содержащего статическую функцию, являющуюся при этом функцией потока? Будет ли у меня при этом два потока? Не произойдет ли каких-либо конфликтов?

Последний раз редактировалось Дмитрий_Ч; 02.10.2007 в 14:43.
Дмитрий_Ч вне форума Ответить с цитированием
Старый 02.10.2007, 16:51   #8
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

2 потока создаются ТОЛЬКО с помощью вызова функции. если у тебя он (вызов) записан в конструкторе, то да, сколько раз ты создашь объект, столько раз вызовется конструктор -> функция CreateThread -> твоя статическая функция. Но для каждого потока будут делаться свои копии переменных, создаваемых в статической функции, так что просто от 2х объектов класса ничего страшного не произойдет.

ЗЫ. Страшное может произойти, если статическая функция использует статические переменные и вообще, если 2 экземпляра этой функции будут работать с одними и теми-же данными.
Alek86 вне форума Ответить с цитированием
Старый 03.10.2007, 09:58   #9
Дмитрий_Ч
 
Регистрация: 26.09.2007
Сообщений: 9
По умолчанию

поток создается не в конструкторе, и функция потока использует статические переменные класса.
Если интересно, могу завтра исходник прислать, только скажи куда слать
Дмитрий_Ч вне форума Ответить с цитированием
Старый 03.10.2007, 12:01   #10
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

чесно говоря, не особо интересно, уж извини
задача достаточно стандартная

а насчет того, что функция потока использует статические переменые класса, тут могут быть (а могут и не быть) большие проблемы

к примеру, если 1й поток будет записывать в переменную, а в это же время 2й поток будет ее читать, то есть шанс, что 2й поток прочтет какой-то мусор.
Для решения, по идее. используется специальное ключевое слово в C++ (забыл, какое ) которое не дает подобному случиться, но также я где-то читал, что на практике оно работает плохо, так что я бы на твоем месте или старался бы не использовать статические переменные в функциях потока, или использовал бы mutex'ы.
Alek86 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт класса из ДЛЛ SunKnight Общие вопросы Delphi 2 21.05.2008 19:31
создание класса Siren Помощь студентам 1 07.05.2008 19:19
Чем различаются функции чтения класса istream C++ Go6a Помощь студентам 3 25.04.2008 11:04
Автоматический вызов функции класса Flaton Общие вопросы C/C++ 4 19.10.2007 17:56
Создания Класса Mickle Общие вопросы Delphi 1 30.04.2007 00:44