Metoda która jest static i const nie mo?że istnieć ?

0

Czemu nie moge zrobić metody w klasie , która jest zarówno static jak i const ???????????? We wszystkich kompilatorach wyskakuje błąd z komentarzem , który mówi w telegraficznym skrócie , że tak nie można . A ja nie rozumiem dlaczego :(

0

Metoda static nie ma dostępu do pól nie-static klasy z założenia.
Metoda const ma dostęp read-only do tych pól.

Po co dawać więc static const??

0

Metoda static nie ma dostępu do pól nie-static klasy z założenia.
Metoda const ma dostęp read-only do tych pól. Po co dawać więc static const??

no wiem , ale jest taka sprawa :
mam klase ,ale taką klase w ktorej jest tylko jedna zmienna prywatna static - program tego wymaga , moze w nim byc tylko jedna ta zmienna . Skoro jest tylko jedna zmienna static , to nie ma potrzeby w ogóle tworzyć jakiegokolwiek obiektu tej klasy , wiec wszystkie metody są static . Ale chce zeby jedna z tych metod mogla TYLKO czytac wartosci tej zmiennej , majac pewnosc ze nigdy jej nie zmienia , stad const .

0

Faktycznie, VC++ 6 protestuje na widok:

static void function() const { ...

Przewertowałem książki, wykłady i sieć ... bez odpowiedzi.
Nie zdążyłem sprawdzić jak zachowa się g++.

najzwyczajniej idę spać.
pa

0

Co ciekawe nie tylko VC tak na to reaguje . Nawet stary DOSowski BC nie pozwala na taką deklaracje : static & const . Wywala taki błąd :
Conflicting Type Modifiers

Coś mi sie zdaje , że to nie kwestia kompilatora , tylko po prostu język na to nie pozwala ... Ale dlaczego ...

0

Temperatura 30C. Najzwyczajniej spalam się. Dlaczego tak bardzo tęsknimy za latem ... ?

To irracjonalne.

Nie mniej irracjonalny wydaje się ten problem. Oto ilustracyjny fragment kodu:

class Test {
static int var;
public:
static void function() const {
...

Każdy znany mi kompilator na widok metody statycznej i stałej protestuje ( przerywa kompilację ). Gdzie leży przyczyna? Czy taka instrukcja nie ma sensu ( i jest niedopuszczalna przez standard ), czy też może winne są nieprzewidywalne kompilatory C++?

Przeglądam więc po raz kolejny "Język C++" Stroustrupa ... strona 254
<font color="darkblue">" Zwróć uwagę na const po (pustej) liście argumentów w deklaracjach funkcji. Oznacza ono, że funkcje nie modyfikują stanu obiektu "</span>

Doznałem olśnienia na widok jednego rzeczownika.

Kluczem jest pytanie - po co deklaruje się metody stałe ?

Pytanie proste niemniej proszę się zastanowić przez chwilę. Funkcja stała obiecuje, że nie dokona żadnych zmian w obiekcie ( a dokładniej - jego polach ). Gdyby jednak niepokorny kod takiej funkcji próbował zmienić stan obiektu, to zostanie wyświetlony stosowny błąd na etapie kompilacji.
Czy celem metody stałej jest właśnie wyświetlanie błędu w czasie kompilacji ? Wątpliwe.

Można by również przypuszczać, że metody stałe deklaruje się w celach projektowych. Taka dodatkowa informacja w nagłówku funkcji może być pożyteczna ( przy dużych projektach ) ale równie dobrze służą temu komentarze i dokumentacja.

Jeżeli utworzymy obiekt stały, to będzie mógł on odwoływać się wyłącznie do metod stałych. Taki jest właśnie sens definiowania metod stałych.

Metody stałe są więc nierozerwalnie związane z obiektami stałymi.

Wracamy do początku ... dlaczego więc nie można zadeklarować metody stałej i statycznej jednocześnie ?

Metoda stała i statyczna nie jest w stanie praktycznie realizować "stałości", stałość bowiem dotyczy obiektów stałych, tymczasem metoda statyczna działa na płaszczyźnie klasy a nie obiektów.

Mam tylko nadzieję, że więcej wyjaśniłem niż namieszałem.

0

No oczywiście masz racje z tym wyjątkiem , że nie uważam że stałość dotyczy tylko obiektów stałych , szczerze powiem , że nigdy nie tworzyłem obiektów stałych i nie patrzyłem na metody const z tej perspektywy . Używałem ich raczej tak żeby kod był "elegencki" , tzn ze jak nie mam zamiaru zmieniac pol obiektu to robie metode const , zeby sie nie zdarzylo ze przez pomylke je zmieniam . No ale w moim przypadku to sie odnosi zarówno do obiektów const , do zwykłych obiektów ( tak można bez problemu ) jak i klas które w ogóle nie mają egzemplarza , np. maja wszystkie pola static . A tu sie okazuje , że nie da sie tak dla metody static . Szkoda ...

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