Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
84 / 11 / 7
Регистрация: 10.02.2012
Сообщений: 225
Записей в блоге: 3

Как передать глобальную переменную в класс?

24.04.2014, 16:21. Показов 4318. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! подскажите плиз, ответ на такой вопрос? У меня есть массив строк например
C++
1
String str[12]
он заполняется при создании формы и находится в секции public,считывает из ini файла настройки порта. А как я могу этот массив передать в клаcc, чтобы произвести инициализацию модема?
например класс такой
C++
1
2
3
4
5
6
7
class gsmodem
 {
 private:
 
pablic:
 
}
Спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2014, 16:21
Ответы с готовыми решениями:

Как заменить глобальную переменную на параметр функции. Передать файл в качестве параметра
Нужно передать xml файл в качестве параметра в функцию sharedStringParse , избавиться от XML_PATH1...

Передать значени через глобальную переменную или указатель
Имеется функция, которая должна возвратить строковое значение. Сделал 2 способами. 1 - объявил...

Как задать глобальную переменную?
Как задать глобальную переменную которая будет работать на всех формах проги? Заранее спасибо.

10
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
24.04.2014, 16:38
Типа того:
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
class gsmodem
  {
  private:
    String settings[3];
  public:
    //SetSettings( String inStr, n );
    void SetSettings( String inStr[3]  )
      {
      for( int i=0; i<3; i++ )
        settings[i] = inStr[i];
      }
 
    String ViewSetting( unsigned index )
      {
      return settings[index];
      }
  };
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String str[3] = { "123",
                  "456",
                  "789"  };
 
gsmodem gm;
gm.SetSettings( str );
 
ShowMessage( gm.ViewSetting(1) );
}
0
84 / 11 / 7
Регистрация: 10.02.2012
Сообщений: 225
Записей в блоге: 3
24.04.2014, 16:48  [ТС]
а до объявления класса - это можно как-нибудь сделать? чтобы данные попали в конструктор при инициализации класса?
ну все равно спасибо

Добавлено через 4 минуты
вот я что еще подумал, а ссылку на форму можно как-нибудь в функцию класса передать? чтобы можно было пользоваться в классе глобальными переменными
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
24.04.2014, 17:00
Цитата Сообщение от kelabod Посмотреть сообщение
чтобы данные попали в конструктор при инициализации класса?
Сувать в конструктор:
Код
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
class gsmodem
  {
  private:
    String settings[3];
  public:
    gsmodem( String inStr[3]  )
      {
      for( int i=0; i<3; i++ )
        settings[i] = inStr[i];
      }
 
    String ViewSetting( unsigned index )
      {
      return settings[index];
      }
  };
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String str[3] = { "123",
                  "456",
                  "789"  };
 
gsmodem gm( str );
//gm.SetSettings( str );
 
ShowMessage( gm.ViewSetting(1) );
}


Цитата Сообщение от kelabod Посмотреть сообщение
вот я что еще подумал, а ссылку на форму можно как-нибудь в функцию класса передать? чтобы можно было пользоваться в классе глобальными переменными
Пожалста:
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class gsmodem
  {
  private:
    TForm *form;
  public:
    gsmodem( TForm *form_ )
      {
      form = form_;
      }
 
    String ViewCaptionForm()
      {
      return form->Caption;
      }
  };
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
gsmodem gm( Form1 );
 
 
ShowMessage( gm.ViewCaptionForm() );
}
1
84 / 11 / 7
Регистрация: 10.02.2012
Сообщений: 225
Записей в блоге: 3
24.04.2014, 19:06  [ТС]
пасибо большое за подсказку. Вообщем получилось так, я просто тупанул в корне
при описании классов в форме есть строка
C++
1
class TForm1 : public TForm
и следовательно сделал ссылку на TForm1 * form и все пошло в функцию конструктора пошли переменные Form1
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
24.04.2014, 23:46
Глобальная переменная, на то и глобальная, что ее не нужно передавать в класс, он ее и так знает. Но глобальные переменные лучше не использовать.
Что то мне подсказывает, что у вас ошибка проектирования. Класс должен знать необходимый минимум переменных, лишнего ему знать не нужно. Как правило в класс не нужно передавать Form1.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.04.2014, 08:43
Цитата Сообщение от gumi250 Посмотреть сообщение
Как правило в класс не нужно передавать Form1.
Если такая гулянка, то можно впринципе и объявить класс как дружественный. Как вариант.
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
25.04.2014, 08:57
Можно, но зачем? Зачем вашему классу может понадобится св-ва или методы Form1 ? Допустим, если ваш класс берет числа из полей Form1, то в класс лучше передавать не Form1, а уже числа.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.04.2014, 09:20
Цитата Сообщение от gumi250 Посмотреть сообщение
Допустим, если ваш класс берет числа из полей Form1, то в класс лучше передавать не Form1, а уже числа.
Что-то действительно затрудняюсь привести с ходу хороший пример.
Допустим, один раз мы класс инициализировали формой, а потом просто вызываем методы, не засоряя код излишними параметрами. Или какой-нибудь класс-менеджер форм, в который мы передаем все формы, а он меняет их как-либо в зависимости от времени суток.
0
84 / 11 / 7
Регистрация: 10.02.2012
Сообщений: 225
Записей в блоге: 3
25.04.2014, 11:53  [ТС]
мужики с классами я на вы, пытаюсь научиться просто. Но мне в голову пришел еще один вариант, а так делать можно? Если я например буду использовать пространство имен. Пример
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
namespace masiv
{
String str[12];
};
class TForm1:public TForm
{
 
private:
 
public:
 
class modem
{
bool modem_open()
      {
      String modem; 
      using namespace masiv;
      modem=str[0] //где переменная str из пространства имен объявленного выше
     };
      
};
 
 
}
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
25.04.2014, 14:16
Цитата Сообщение от kelabod Посмотреть сообщение
Если я например буду использовать пространство имен
Зачем? Класс должен быть самодостаточным. Т.е. если вы завтра захотите использовать свой класс в другой программе у вас не должно возникнуть особых проблем. Поэтому есть простые правила как этого добиться. Например, без сильной необходимости не использовать глобальные переменные, класс по возможности должен использовать только свои св-ва.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Допустим, один раз мы класс инициализировали формой
SatanaXIII, Конечно если подумать, то пример придумать можно, но это бывает крайне редко и врятли это такой случай.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.04.2014, 14:16
Помогаю со студенческими работами здесь

Как обьявить глобальную переменную в функции?
Вопрос как объявить переменную в функции чтобы ей можно было пользоваться везде?

Как обьявить глобальную переменную в диалоговом окне?
Visual C++ Программа сделана на основе диалогового окна. При двойном щелчке мыши по элементу...

Как и где описать глобальную переменную?
Как и где описать глобальную переменную? В главном класее я определяю указутель на CDaoDatabase...

Как объявить глобальную переменную в Dev-C++ 4.9.9.2?
Попробовал написать из справочника по С++ такую программу: #include &lt;iostream&gt; #include...

Как создать глобальную переменную в MFC?
всем доброго времени суток! простите за глупый вопрос. скажите, плз, как создать глобальную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru