Działanie klasy, zwracanie wartości

0

Zastanawia mnie skąd funkcja Foo::fun wie, który obiekt ma zmodyfikować?
Najpierw wywołuję funkcję fun dla x a potem dla y, myślałem, że to się jakoś przysłoni a tak nie jest i na końcu wyświetla mi dwie różne wartości, proszę o wytłumaczenie.

class Foo
{
    float value;
public:
    void fun (  int a, float b);
    int getValue() const {return value;}
};

void Foo::fun(  int a, float b)
{
    value = a*b;
}


int main() {
   Foo x,y;

   x.fun(1, 2.5);
   y.fun(3, 7.3);
   cout<<x.getValue()<<endl;
   cout<<y.getValue()<<endl;
}

1
   Foo x; // tworzysz obiekt klasy Foo który zawiera zmienną x.value.
   Foo y; // tworzysz obiekt klasy Foo który zawiera zmienną y.value.
  
   // zmienne x.value i y.value mają różne adresy w pamięci.
   
   x.fun(10,20) ; // funkcja wywoływana jest na rzecz obiektu x i modyfikuje x.value
   y.fun(1,2) ;   // funkcja wywoływana jest na rzecz obiektu y i modyfikuje y.value

Możesz także zadeklarować zmienną value jako statyczną i wtedy rzeczywiście wyświetlona zostanie ta sama wartość na końcu.

class Foo
{
    static float value;
public:
    static void fun ( int a, float b);
    int getValue() const {return value;}
};

float Foo::value {0};

void Foo::fun(  int a, float b)
{
    value = a*b;
}

int main() {
   Foo x,y;

   x.fun(1, 2.5);
   y.fun(3, 7.3);
   cout<<x.getValue()<<endl;
   cout<<y.getValue()<<endl;
}
1

Nie wiem po co ja mam terminy konsultacji i oficjalne forum na którym możecie o takie rzeczy zapytać...

Drugi wykład, pierwsze 5 stron z prezentacji... Ten przykład służył do wytłumaczenia czym jest "this".

1 użytkowników online, w tym zalogowanych: 0, gości: 1