Czy w standardowym c++ używa się modyfikatora static przed nazwą klasy?

0

Witam,
Czy w standardowym c++ używa się modyfikatora static przed nazwą klasy? Ja używam vs 2010beta1 i tam to przechodzi ale szczerze się przyznam iż za każdym razem jak coś robię nowego w vs to mam obawę, że to przechodzi ale jako managed c++ a nie native a ja nie mam zamiaru wyrobić sobie złych nawyków. No i oczywiście jeśli tak to jakie to ma skutki (czy np: wszystkie metody i\lub składniki muszą być static?). Dzięki za odpowiedzi z góry.

0

Coś mi się wydaje, że nie można i jest to rozszerzenie... Nie dotyczy czegoś takiego:

static class foo {} ble;
//to samo co
//class foo {};
//static foo ble;

Aha - managed C++ nie żyje, zostało zastąpione przez C++/CLI.

0

dzięki manfredek

0

słowo kluczowe static ma kilka znaczeń. W przypadku symboli globalnych (nie będących wewnątrz klasy) static mówi kompilatorowi: ten symbol będzie używany tylko w tym module (pliku cpp), nie udostępniaj tej nazwy nigdzie poza ten plik.
Efekt jest taki, że w programie możesz mieć kilka rożnych obiektów o tej samej nazwie, a nie będą one sobie na wzajem przeszkadzać.
W praktyce to słowo kluczowe w tym kontekście jest używane BARDZO BARDZO rzadko i w zasadzie istnieje nadal w języku C++ z powodów historycznych. Nieświadome używanie tego słowa, może prowadzić do bardzo dziwnych efektów (może wysmażę jakiś przykład).

słowo static wewnątrz klasy ma zupełnie inne znaczenie i oznacza dane pole/metoda jest własnością całej kasy (a nie tylko poszczególnych obiektów). Coś jak zmienna/funkcja globalna, której użycie wymaga bycia w przestrzeni nazwy danej klasy. W tym przypadku słowo kluczowe jest używane dość często.

atch napisał(a)

(czy np: wszystkie metody i\lub składniki muszą być static?).
to wskazuje na to, że nie rozumiesz co robi słowo kluczowe static. Odpowiedź brzmi zdecydowanie NIE, takie metody i pola, które wymagają tego modyfikatora, to są przypadki szczególne (patrz opis wyżej).

0

Do MarekR22:
Dzięki za Twoją odpowiedź. Jeśli chodzi zaś o fragment, w którym piszesz, że nie rozumiem znaczenia słowa static to nie masz racji, bo pytałem o znaczenie tego słowa w kontekscie modyfikatora klasy i czy takowe istnieje i ma zastosowanie a nie jako składnika klasy. Pytanie moje spowodowane było tym, iż jak wspomniałem vs pozwala umieścić ten modyfikator przed słowem class a jako, że mam trochę doświadczenia z Javą i tam np: jeśli zadeklarujemy klasę jako abstract to wszystkie metody muszą być zadeklarowane jako abstract więc chciałem się upewnić czy w C++ jest tak samo czy nie.

0
atch napisał(a)

vs pozwala umieścić ten modyfikator przed słowem class
Po czym wywala warning i je olewa, czyli w zasadzie to jednak nie pozwala.

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