Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Dziedziczenie klas i tworzenie obiektów

Ostatnio zmodyfikowano 2017-02-24 14:55
Autor Wiadomość
latajacaryba
» 2017-02-24 13:39:25
Jeśli tworzysz konstruktor klasy pochodnej, to musi on użyć konstruktora klasy podstawowej (Ty go użyłeś).
Jednak, jak zauważył Pekfos, przekazujesz argument (domniemany, const referencję do obiektu vector, domniemana, bo przypisałeś = Vector2f( 0, 0 ) )
Ale... po co, skoro nie przesyłasz tego argumentu do konstruktora klasy podstawowej, ani nie używasz go w konstruktorze klasy pochodnej.
W dodatku stworzyłeś zmienną bool o nazwie "wciśniety". Z tym również nic nie robisz.

Mam wrażenie, iż myślisz, że klasa to puste pudełko, a konstruktor "wkłada" do niej zmienne (np. Twoją zmienną bool wcisniety)
To błędne rozumowanie.
Konstruktor jest do np. nadawania wartości zmiennym klasy. Można to zrobic ręcznie, np.

C/C++
class Abc
{
    bool wcisniety;
};

int main()
{
    Abc obiekt;
    obiekt.wcisniety = true;
}

Ale jeśli będziesz miał wiele składników klasy, lub będziesz tworzył wiele obiektów, to zobacz jak pięknie zmieni się działanie z pomoca konstruktora:
C/C++
class Abc
{
    bool a;
    int b;
    double c;
    float d;
    string x;
    //KONSTRUKTOR
    Abc( bool aa, int bb, double cc, float dd, string xx ) //KOnstruktor ma taka nazwe, jak nazwa klasy
    {
        a = aa; // skladnik bool a otrzymuje wartosc argumentu bool aa
        b = bb; // itd.
        c = cc;
        d = dd;
        x = xx;
    }
};

int main()
{
    Abc obj1; // kiedy mamy konstruktor nie wolno tworzyc sobie obiektow bez ich natychmiastowej inizjalizacji - zaraz wytlumacze
    obj1.a = true;
    obj1.b = 3;
    obj1.c = 3.4;
    obj1.d = 8.2;
    obj1.x = "string";
   
    //A teraz z konstruktorem
   
    Abc obj2( true, 3, 3.4, 8.2, "string" );
}

W przypadku, obj1 zrobiłem umyślnie błąd - jeśli mamy już konstruktor (i nie jest on domniemany), to musimy przy tworzeniu obiektu OD RAZU inizjalizować obiekt tym, lub innym konstruktorem (tak jak przy obj2), więc po prostu wyobraź sobie, że obj1 to osobny przykład, w którym klasa wygląda tak samo, ale nie ma konstruktora.

Czy teraz widzisz, do czego on służy?

[/cpp]
P-158253
Justarandomguy
Temat założony przez niniejszego użytkownika
» 2017-02-24 13:40:51
C/C++
MojaKlasaPrzycisku( const Vector2f & size = Vector2f( 0, 0 ) )
    : RectangleShape( size )
{
    bool wcisniety;
};
ahh, w kodzie miałem inaczej, więc co jest z tym nie tak?
P-158254
latajacaryba
» 2017-02-24 13:43:49
Czy Ty w ogóle czytasz, co ja i Pekfos piszemy? ;P
Nie tak jest to, że ten konstruktor nic nie robi. Masz w głowie błędną definicję, co to konstruktor.
On nie dodaje obiektów do klasy! On najczęściej nadaje im wartości lub ustawia na coś wskaźniki!

Za to Twój przyjmuje argument, przesyła go do konstruktora klasy nadrzędnej, po czym tworzy zmienną bool (KTÓRA PO ZAKOŃCZENIU PRACY KONSTRUKTORA JEST USUWANA!) i kończy prace. Jedyna jego użyteczna funkcja to to, że korzysta z konstruktora klasy rodzica. Niestety, nic więcej.

Poczytaj sobie o zakresach ważności. Jeśli kończysz prace z funkcją / konstruktorem / metodą, to wszystkie zmienne, które w nich utworzyłeś natychmiast są usuwane po zakończeniu pracy danej funkcji lub konstruktora (chyba, że są statyczne, ale Twoje nie są).
P-158255
carlosmay
» 2017-02-24 14:55:11
P-158257
1 « 2 »
Poprzednia strona Strona 2 z 2