• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Programowanie Obiektowe / Klasy / Dziedziczenie
#1
Witam serdecznie forumowiczów.
Jest to mój pierwszy post tutaj. Bardzo prosze o pomoc i wyjaśnienie głupiego problemu. Uważam, że problem dotyczy dziedziczenia do którego chyba źle podchodzę lecz już wyjaśniam. Szykując sobie program na arduino postanowiłem Obsługę menu przenieść sobie do osobnej biblioteki/klasy.

#include "Menu.h"
#include <Arduino.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);



Menu::Menu(){
  Serial.begin(9600);
  Serial.println("Tu bylem...TEST");
  //lcd.begin(20,4);
  // lcd.clear();
  // lcd.init();
  // lcd.init();                      // initialize the lcd
  // lcd.backlight();
}


Problem polega na tym że, gdy tylko odkomentuję przykładowo lcd.Init w konstruktorze klasy wszystko wisi....
Gdy obiekt lcd jest zakomentowany w momencie utworzenia instansji pojawia sie testowo napis "Tu byłem..."
gdy przykładowo odremuje lcd.init() napis testowy nawet się nie pojawi. W czym tkwi problem ?
Czy klasa w całości powinna dziedziczyć po LiquidCrystal...??? Jak powinien wyglądać prawydłowy zapis ?
class Menu::Liquid.... {

} ????

Bardzo serdecznie dziękuję za każdy pomocny post.

Oczywiście klasa rozbita na pliki cpp oraz h... nie zapomniałem o properties itp. Problem dotyczy wywołania obiektu lcd.
 
Odpowiedź
#2
Dziedziczenie tak nie działa.
Jeżeli chcesz dziedziczyć po klasie, to robisz to tak:

Kod:
class menu : public liquidcrystali2c
{
 
};


Wtedy wszystkie metody, pola itd. klasy liquidcrystali2c będą
dostępne dla klasy menu.
Np:
Kod:
class klasa1
{
    private:
    int zmienna1; //pole prywatne

    public:
    string funkcja1(){
    string A = "Jestem metodą1 klasy1";
    return A;
    }
    string funkcja2(){
    string A = "Jestem metodą2 klasy1";
    return A;
    }

};

class dziedzic : public klasa1
{
    public:
    void funkcja3(){
   
    }
    string nazwa = "Jestem stringiem z klasy dziedzic";
};
void loop()
{
    dziedzic Test; //obiekt klasy dziedzic
    string a,b,c;
    a = Test.funkcja1();// metoda klasy bazowej (klasa1)
    b = Test.funkcja2();// metoda klasy bazowej (klasa1)
    c = Test.nazwa;// pole klasy pochodnej (dziedzic)
    Test.funkcja3();//metoda klasy pochodnej (dziedzic)

}

Można oczywiście dziedziczyć po wielu klasach:

 
Kod:
class dziedzic : public klasa1, public klasa2, public klasa3{};
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości