Передача объекта в класс
- Войдите на сайт для отправки комментариев
Ср, 12/09/2018 - 00:34
Всем привет! Знаю только базовый C, хочу чуть освоиться с C++ с ООП. И сразу прям затык с ходу :(
В общем имеется простой скетч:
#include <Adafruit_GFX.h> #include <SPI.h> #include <Wire.h> #include <Adafruit_ILI9341.h> #include <XPT2046_Touchscreen.h> #include "MainMenuScreen.h" #define TFT_DC 2 #define TFT_CS 15 Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); XPT2046_Touchscreen ts(4, 5); MainMenuScreen screen(ts, tft); void setup(void) { tft.begin(); ts.begin(); tft.fillScreen(ILI9341_BLACK); screen.draw(); } void loop() { }
Файл MainMenuScreen.h:
#ifndef MainMenuScreen_h #define MainMenuScreen_h #include <Adafruit_GFX.h> #include <Adafruit_ILI9341.h> #include <XPT2046_Touchscreen.h> class MainMenuScreen { public: MainMenuScreen(XPT2046_Touchscreen &ts, Adafruit_ILI9341 &tft); void drawScreen(); protected: Adafruit_GFX_Button button; XPT2046_Touchscreen *ts; Adafruit_ILI9341 *tft; }; #endif
Файл MainMuneScreen.cpp:
#include "MainMenuScreen.h" MainMenuScreen::MainMenuScreen(XPT2046_Touchscreen &ts, Adafruit_ILI9341 &tft) { this->ts = &ts; this->tft = &tft; } void MainMenuScreen::drawScreen() { tft->fillScreen(ILI9341_BLACK); button.initButton( &tft, 30, 120, 60, 240, ILI9341_DARKCYAN, ILI9341_BLUE, ILI9341_GREENYELLOW, "Кормление", 2); button.drawButton(); }
Что хочу сделать: в классе объявить переменные соответствующего типа: для дисплея и для тачсенсора. Через конструктор передать объекты tft и ts по ссылке и положить в соответствующие переменные. Далее с ними работать внутри класса. Помогите правильно сделать на данном примере, а то опыт только с PHP, а там все по другому :(
О, вроде решил! Надо такого вида конструктор делать:
MainMenuScreen::MainMenuScreen(XPT2046_Touchscreen &ts, Adafruit_ILI9341 &tft): ts(ts), tft(tft) {}
Может кто объяснить, что обозначает двоеточие и что происходит?:)
Вот я тоже смотрю на запись 2х2=4 . И не понимаю почему буква x между двойками и двойной минус (=)перед 4. Может вы мне подскажите ;)
И да не обязательно заводить их через конструтор. Можно просто передать указатель и через указатель пользовать. Есть еще множественное наследование . И много еще чего. Но все эти трюки громозки если вы не привыкли работе с ними.