Что нового

C++ классы

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Всем привет, кто меня помнит. ;) Давненько меня не было...

Кто нибудь подскажите, как это сделать?

Код:
class Cpp { 
  public: 
    byte number;
    void message() { 
       numder ++; 
    } 
}; 

void setup() {} 

void loop() { 
  Cpp objMessage; 
  objMessage.message(); 
  // Как Здесь! получить значение numder, не декларируя переменную в глобальную ? 
}
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Вы не опечатались? Точно не number везде?
Если не опечатались, то никак. На это и ставка, пока Вы не опишите переменную в классе как публичную, или хотя бы readonly, то Вы не сможете получить к ней доступ.
 
Автор
F

FlatX007

Tattoo!
Сообщения
197
Репутация
35
ну так переменная объявлена после public: , что не так ?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
FlatX007 [?]
Переменная number объявлена правильно, и да, она будет доступна через objMessage.number.
Но вот переменная numder (кстати в данном примере не объявлена - это есть ошибка). Объявлена внутри метода message() и является локальной только для этого метода. Ни какой другой метод, даже в данном классе Cpp не будет иметь к ней доступ.
 
Автор
F

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Тогда мой пример, в начале кода объявлены боолены глобально, если я их запихну внутрь класса (после public) как мне вне класса получить значение этих бооленов, не догоняю :scratch: ?

Код:
boolean bolTimer_state1, bolTimer_state2, bolTimer_state3, bolTimer_state4;

class _ClassTimer
{
    int number_timer;
    long OnTime;
    long OffTime;
    int timer_state;
    unsigned long previousMillis; // последний момент смены состояния

  public:

    _ClassTimer(int timer, long on, long off)
    {
      number_timer = timer;
      pinMode(number_timer, OUTPUT);

      OnTime = on;
      OffTime = off;
      timer_state = LOW;
      previousMillis = 0;
    }

    int Update()
    {
      unsigned long currentMillis = millis(); // текущее время в миллисекундах
      if ((timer_state == HIGH) && (currentMillis - previousMillis >= OnTime))
      {
        timer_state = LOW; // выключаем
        previousMillis = currentMillis; // запоминаем момент времени
        if (number_timer == 1) bolTimer_state1 = !bolTimer_state1;
        else if (number_timer == 2) bolTimer_state2 = !bolTimer_state2;
        else if (number_timer == 3) bolTimer_state3 = !bolTimer_state3;
        else if (number_timer == 4) bolTimer_state4 = !bolTimer_state4;
      }
      else if ((timer_state == LOW) && (currentMillis - previousMillis >= OffTime))
      {
        timer_state = HIGH; // выключаем
        previousMillis = currentMillis ; // запоминаем время
      }
    }
};

_ClassTimer Timer4(4, 500, 500);
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
FlatX007 [?]
как мне вне класса получить значение этих бооленов, не догоняю

Вы инициализируете новый объект класса по конструктору. Как только Вы это сделали, Вы можете обращаться к внутренним открытым переменным.

Код:
class _ClassTimer
{
    int number_timer;
    long OnTime;
    long OffTime;
    int timer_state;
    unsigned long previousMillis; // последний момент смены состояния

  public:
    bool bolTimer_state1, bolTimer_state2, bolTimer_state3, bolTimer_state4;

    _ClassTimer(int timer, long on, long off) //конструктор
    {
      number_timer = timer;
      pinMode(number_timer, OUTPUT);

      OnTime = on;
      OffTime = off;
      timer_state = LOW;
      previousMillis = 0;
    }

    int Update()
    {
      unsigned long currentMillis = millis(); // текущее время в миллисекундах
      if ((timer_state == HIGH) && (currentMillis - previousMillis >= OnTime))
      {
        timer_state = LOW; // выключаем
        previousMillis = currentMillis; // запоминаем момент времени
        if (number_timer == 1) bolTimer_state1 = !bolTimer_state1;
        else if (number_timer == 2) bolTimer_state2 = !bolTimer_state2;
        else if (number_timer == 3) bolTimer_state3 = !bolTimer_state3;
        else if (number_timer == 4) bolTimer_state4 = !bolTimer_state4;
      }
      else if ((timer_state == LOW) && (currentMillis - previousMillis >= OffTime))
      {
        timer_state = HIGH; // выключаем
        previousMillis = currentMillis ; // запоминаем время
      }
    }
};

_ClassTimer Timer = new _ClassTimer(4, 500, 500); //создаем объект из конструктора

Timer.bolTimer_state1 = true; //Обращаться к публичным переменным
 

veretragna

Как писал, так и работает.
Сообщения
140
Репутация
10
OffTopic:
А че, так можно?
В смысле, задавать вопросы о C++ на форуме AutoIt? :laugh:
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
veretragna [?]
В смысле, задавать вопросы о C++ на форуме AutoIt?

Ну тема в общении, почему бы и нет, если кто то знает ответ. Просто чаще всего на вопросы других ЯП тут не могут ответить)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
Medic84
IMHO, это не совсем правильно.
Eсли бы вопрос хоть как-то касался Autoit, тогда другое дело.
 
Автор
F

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Как вам сказать, мне нравится этот форум - люди тут хорошие.

Эта тема могла быть и про разведение веслоухих Британских кошек :smile:, а если по существу то правила форума я не нарушил.
 
Верх