У меня есть некоторые концептуальные проблемы с классами, и я хочу убедиться, что все делаю правильно.
Я программирую на Arduino и использую некоторые библиотеки для своего проекта. Библиотеки реализуют класс, который я могу создать в своем проекте.
Например, библиотека AdafruitMotorShieldV2 реализует класс Adafruit_MotorShield, и в этом примере они создают экземпляр класса в переменной AFMS. Пока все ясно.
#include <Adafruit_MotorShield.h>
// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Однако я придумал и другие библиотеки, такие как DeadReckoner, где в примере класс создается как:
#include <DeadReckoner.h>
DeadReckoner deadReckoner(&leftTicks, &rightTicks, TICKS_PER_REV, RADIUS, LENGTH);
Здесь я не уверен, что происходит.
DeadReckoner (заглавные буквы) - это имя класса и, конечно же, имя конструктора. Я предполагаю, что deadReckoner (подчеркивание) - это переменная, в которой создается экземпляр DeadReckoner, но почему вызов отличается от вызова библиотеки Adafruit?
Другими словами: эквивалентны ли эти два вызова?
DeadReckoner deadReckoner(&leftTicks, &rightTicks, TICKS_PER_REV, RADIUS, LENGTH);
DeadReckoner deadReckoner = DeadReckoner(&leftTicks, &rightTicks, TICKS_PER_REV, RADIUS, LENGTH);
Это соответствующий код внутри DeadReckoner.h, если необходимо
class DeadReckoner {
public:
DeadReckoner(volatile unsigned long *, volatile unsigned long *, unsigned long, unsigned long, int, double, double);
// other methods of the class
}