Wątek przeniesiony 2015-10-18 00:24 z C# i .NET przez somekind.

Funkcja statyczna

0

Przykładem w c# funkcji statycznej to funkcja Math.Sqrt Czy w c++ funkcję sqrt też należy rozumieć jako statyczną?

0

Math.Sqrt to metoda, a nie zwykła funkcja. W c++ sqrt() to zwykła funkcja z tego co wiem, więc z racji tego nie może być "statyczna" lub "niestatyczna".

0

Tak metoda zgadza się. Jednak myślałem, że metode którą mogę wywołać bez obiektu nazywa się statyczną w c++ i c#. Mógłbyś wyjaśnić czemu w c# tylko nazywa się ona statyczną?

0

czyli w c++ działamy na argumentach a w c# na tak jakby obiekcie którego nie ma?

0

bo przecież w c++ też trzeba dołączyć biblioteke math

0

Nie ma to nic wspólnego z bibliotekami. To porusza kwestię programowania obiektowego.
Funkcja to po prostu ciąg akcji do wykonania.
Metoda to specyficzny rodzaj funkcji, wykonujący czynności na obiekcie.

1

Żeby być poprawnym, to w C# w ogóle nie ma funkcji, tylko metody, których są dwa rodzaje: statyczne (wołane jako NazwaKlasy.NazwaMetody) i instancyjne (nazwaObiektu.NazwaMetody).

0
Wybitny Samiec napisał(a):

Tak metoda zgadza się. Jednak myślałem, że metode którą mogę wywołać bez obiektu nazywa się statyczną w c++ i c#. Mógłbyś wyjaśnić czemu w c# tylko nazywa się ona statyczną?

Tak, masz rację - tyle, że w c++ oprócz metod zawartych wewnątrz klas możesz utworzyć także luźne funkcje nie powiązane z żadną klasą, do których odwołujesz się bezpośrednio przez ich nazwę, nie poprzedzoną nazwą klasy (metody statyczne) lub obiektu (metody zwykłe). Do takich właśnie funkcji należy sqrt(). Dlaczego nie można jej nazwać funkcją statyczną? Z prostego powodu - taka nazwa sugerowałaby istnienie funkcji niestatycznych (instancyjnych) a takie nie istnieją poza obiektami.

Wybitny Samiec napisał(a):

czyli w c++ działamy na argumentach a w c# na tak jakby obiekcie którego nie ma?

Nie, nie działamy na obiekcie, którego nie ma :D Działamy na klasie. Klasa to nie jest jakaś czarodziejska struktura tworząca nieistniejące rzeczy. To zwykły kawałek kodu - jeśli jakaś jej metoda jest statyczna, to znaczy, że możemy z niej korzystać bezpośrednio, a to, że musimy w tym celu podać nazwę klasy nie oznacza tworzenia niczego dodatkowego - po prostu wiele klas może mieć metody o tej samej nazwie, więc musimy jednoznacznie określić z czego chcemy skorzystać - stąd zapis NazwaKlasy.Metoda() (lub bodajże NazwaKlasy::Metoda() w c++).
A o co Ci chodziło z tymi argumentami to nie mam pojęcia - zarówno do metody jak i do zwykłej funkcji możesz przekazać argumenty.

Wybitny Samiec napisał(a):

bo przecież w c++ też trzeba dołączyć biblioteke math

Biblioteka to co innego niż klasa - biblioteka math w tym przypadku to plik ze zbiorem luźnych funkcji (i stałych matematycznych). Klasa Math natomiast to nie plik z funkcjami a sformalizowana struktura z metodami statycznymi - w praktyce używasz tego bardzo podobnie, jest to po prostu bardziej usystematyzowany sposób dostępu do funkcji (zwanych metodami w tym przypadku).

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