Zmienna tylko do odczytu
Ostatnio zmodyfikowano 2015-01-08 13:41
fokusx Temat założony przez niniejszego użytkownika |
Zmienna tylko do odczytu » 2015-01-06 13:12:32 Mam daną klasę "klasa": class klasa { public: (...) private : int zmienna; };
Jak udostępnić zmienną "zmienna" np. funkcji "func", tak by ta funkcja mogła ją tylko odczytać, nie dając jej prawa do zmiany wartości? |
|
alixir |
» 2015-01-06 13:17:03 Utworzyć metodę zwracającą wartość zmiennej. |
|
kubawal |
» 2015-01-06 13:44:23 class klasa { int zmienna; public: int getZmienna() const { return zmienna; } };
|
|
fokusx Temat założony przez niniejszego użytkownika |
» 2015-01-06 13:54:15 Aaa no tak ... A co ze wskaźnikami? Wartość pozostanie zawsze stała? Czy tylko adres pamięci? |
|
alixir |
» 2015-01-06 14:23:21 Chyba jednak nie zrozumiałeś. Być może zmyliło cię słowo const na końcu funkcji, które w tym przypadku jest zbędne (choć dobrą praktyką jest pozostawienie go tam). Samo słowo kluczowe return powoduje, że daną możesz tylko odczytać i typ danej nie ma tu żadnego znaczenia, więc kod: class klasa { int * zmienna; public: int getZmienna() const { return * zmienna; } }; da dokładnie taki sam rezultat, jak dla zwykłej zmiennej. |
|
kubawal |
» 2015-01-06 14:30:19 które w tym przypadku jest zbędne |
Nie do końca. Bez tego const nie mozna by było skompilować np. takiego kodu: void f( const klasa & o ) { std::cout << o.getZmienna() << endl; }
Funkcja f() pobiera stałą referencję. Metoda getZmienna() nie modyfikuje swojego obiektu, lecz kompilator sam z siebie tego nie wie. Dzięki słowie const możemy podpowiedzieć kompilatorowi, że metoda może być wywołana na zmiennych typu const. |
|
fokusx Temat założony przez niniejszego użytkownika |
» 2015-01-08 12:56:18 W ten sposób pobiorę wart. zmiennej, która nie będzie mogła być zmieniona przez funkcję znajdującą się poza klasą ale gdy zmienię jej wart. przy użyciu metody , to pobrana wart. przez zewn. funkcję nie zmieni się, a ja chcę przechowywać adres do tej zmiennej ale tak by wart. można by tylko odczytywać. class klasa { int zmienna; public: int * GetZmienna(); void metoda(); };
void klasa::metoda() { klasa::zmienna = 6; }
int main() { klasa kl; int * wsk; wsk = kl.GetZmienna(); printf( "1 : %i \n", * wsk ); kl.test(); printf( "2 : %i \n", * wsk ); }
Wyświetli : 1 : <jakaś liczba> 2 : 6 Prawidłowo działa, z tym że w main () mogę zmienić wart. zmienna : |
|
alixir |
» 2015-01-08 13:41:53 Określ się w końcu co chcesz uzyskać. Bo przykłady powyżej mówiły o zwracaniu wartości (której nie można zmienić), a teraz chcesz zwrócić wskaźnik. W takim przypadku musiałbyś zwracać wskaźnik na stałą, ale osobiście już nie wiem czego oczekujesz. |
|
« 1 » |