Передача объекта в класс
- Войдите на сайт для отправки комментариев
Ср, 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. Может вы мне подскажите ;)
И да не обязательно заводить их через конструтор. Можно просто передать указатель и через указатель пользовать. Есть еще множественное наследование . И много еще чего. Но все эти трюки громозки если вы не привыкли работе с ними.