Tentando entender programação a objeto


#1

Olá pessoal do forum, eu já mexo com microcontroladores há algum tempo mas ARDUINO faz pouco tempo que eu mexo.
Estou com uma dúvida sobre a programação que pode parecer sem sentido mas no trecho abaixo que é de uma biblioteca do MAX6675 qual a função dos “::”.

MAX6675::MAX6675(int8_t SCLK, int8_t CS, int8_t MISO) {
sclk = SCLK;
cs = CS;
miso = MISO;

//define pin modes
pinMode(cs, OUTPUT);
pinMode(sclk, OUTPUT);
pinMode(miso, INPUT);

digitalWrite(cs, HIGH);
}


#2

Uma classe tem o formato:

Classe::Classe()
{
}
Esse seria o construtor da classe. Ao que parece, você pegou o construtor como exemplo.
No caso, para você utilizar a classe, precisa passar os parâmetros entre parênteses na hora de usar:

MAX6675 max(sclk,cs,miso);

Para os métodos da classe, o formato é o mesmo, mas o tipo de retorno é declarado previamente. Ex:

void MAX6675::exemplo(int banana, char *umaString)
{
    this->banana = banana;
    if (!strcmp("teste",umaString){
        Serial.println("Iguais");
    }
}

Na hora de usar, como você já instanciou o objeto:

max.exemplo(4,"fruta amarela\n");

Se quiser, te convido a dar uma olhada no meu canal do Youtube, estou colocando videos tutoriais de Qt, que é um framework de C++ e já estou criando projetinhos para interagir com dispositivos que possuam UART, mas logo entro em outros protocolos também.
https://www.youtube.com/dobitaobytebrasil


#3

Fiz a pergunta pois em outro exemplo de uso apresentado como classe ela foi criada assim:

class PID{

PID(double _kP, double _kI, double _kD){
kP = _kP;
kI = _kI;
kD = _kD;
}
};

E para usar a classe foi usado:

PID meuPid(1.0, 0, 0);

Essas são apenas partes do código que baixei, e foi o que eu entendi, aí quando vi os “::” em outro código eu fiquei na dúvida e resolvi consultar.

Agora estou vendo que tem um “construtor de classe” e “métodos da classe”, acho que vou precisar estudar mais um pouco.

Já usei o C para microcontroladores PIC e agora estou me aventurando com o ARDUINO, porém não dá para ficar apenas baixando bibliotecas prontas, gosto de entender como essas coisas funcionam para poder criar soluções personalizadas ou ajustá-las a uma situação específica.

Se tiver uma indicação de literatura ou dica a respeito eu agradeço.


#4

Dá uma pesquisada sobre classes para entender melhor. Na classe, um método também é uma função, mas funções podem não ser métodos.

Na verdade, você vai precisar de um livro de C++. Fora a questão que você já está apresentando dúvidas relacionado a classes, ainda tem várias outras questões; em C++ você pode ter métodos públicos ou privados (public e private, respectivamente). Tem herança (inherit), onde uma classe pode herdar métodos e propriedades de outro, você pode declarar diferentes protótipos para um mesmo método e mais uma enormidade de coisas.

Antes de programar em C++ eu tive que aprender Python no trabalho e me ajudou muito a entender um pouco sobre objetos. Depois disso, quando fui pra Qt (um framework de C++), aí foi um pouco mais fácil de entender, mas direto do C, meu amigo, é osso.


#5

Mais uma vez obrigado pela dica, vou buscar alguma literatura e estou criando um projeto (circuito de teste) onde eu possa aplicar isso na prática, acho que fica mais fácil ver funcionando, ou seja, não funcionando, não funcionando, não funcionando, até achar os erros e fazer funcionar.