Keresés

Hirdetés

Új hozzászólás Aktív témák

  • dabadab

    titán

    válasz bandi0000 #10758 üzenetére

    "double a,b; // ez a rész mit csinálni?"

    Definiálja az osztály két tagváltozóját.

    "mármint ha meghívom ezt az osztályt, akkor nem ezt a részét hívom meg nem? hanem ezt:
    Teglalap(double a, double b)
    "

    Igen, mivel azok változók és nem függvények, ezért nem fogod tudni meghívni őket :)
    Ez a Teglalap() függvény egy speciális metódus (ez onnan látszik, hogy egyrészt úgy hívják, mint magát az osztályt, másrészt meg nincs visszatérési típusa), a konstruktor, ennek a feladata az, hogy az osztály létrehozásakor inicializálja annak a belső állapotát (adjon valami értéket a tagváltozóknak, ilyesmi).

    "this->"mutatóval" melyikre mutatok?"

    A this nem "mutató", hanem mutató, tényleg, egy teljesen közönséges mutató, az egyetlen dolog, ami speciális benne, hogy nem a program ad neki értéket.

    És hogy mire mutat?

    Ugye az osztályok adatokból és az azokat kezelő függvényekből állnak. Egy kicsit képzeld el, hogy ez hogyan működhetett C-ben:

    struct Teglalap
    {
    double a;
    double b;
    }

    double terulet(struct Teglalap *t)
    {
    return t->a * t->b;
    }

    double kerulet(struct Teglalap *t)
    {
    return 2*t->a + 2*t->b;
    }

    Namármost (egyszerűsítő mese:) egy idő után felmerült, hogy tökre macera ez az állandó pointerpasszolgatás és milyen jó lenne, ha ezt inkább a fordító intézné, ebből lett az osztály, ami tulajdonképpen így is kinézhetne:

    class Teglalap
    {
    double a;
    double b;
    double terulet(class Teglalap *this)
    {
    return this->a * this->b;
    }

    double kerulet(class Teglalap *this)
    {
    return 2*this->a + 2*this->b;
    }
    }

    De nem így néz ki, mert tök felesleges lenne mindig odaírni a this-t, ezért inkább így néz ki, a this-eket meg majd "odagondolja" a fordító:

    class Teglalap
    {
    double a;
    double b;
    double terulet()
    {
    return a * b;
    }

    double kerulet()
    {
    return 2*a + 2*b;
    }
    }

    Na, és akkor mire mutat a this? Az osztály egy konkrét példányának (egy objektumnak) az adatterületére, ott, ahol annak a konkrét objektumnak az adatai (esetünkben a két double változó) meg a virtuális függvényeinek a címei vannak (jelen esetben ilyen nincs).

    DRM is theft

Új hozzászólás Aktív témák