Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zmienna tylko do odczytu

Ostatnio zmodyfikowano 2015-01-08 13:41
Autor Wiadomość
fokusx
Temat założony przez niniejszego użytkownika
Zmienna tylko do odczytu
» 2015-01-06 13:12:32
Mam daną klasę "klasa":
C/C++
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?
P-124304
alixir
» 2015-01-06 13:17:03
Utworzyć metodę zwracającą wartość zmiennej.
P-124306
kubawal
» 2015-01-06 13:44:23
C/C++
class klasa
{
    int zmienna;
   
public:
   
    int getZmienna() const { return zmienna; }
};
P-124311
fokusx
Temat założony przez niniejszego użytkownika
» 2015-01-06 13:54:15
Aaa no tak ...

A co ze wskaźnikami?

C/C++
(...)
int * zmienna;
(...)


Wartość pozostanie zawsze stała? Czy tylko adres pamięci?
P-124313
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:

C/C++
class klasa
{
    int * zmienna;
   
public:
   
    int getZmienna() const { return * zmienna; }
};

da dokładnie taki sam rezultat, jak dla zwykłej zmiennej.
P-124315
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:
C/C++
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.
P-124316
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ć.
C/C++
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 :
C/C++
* wsk = 7;
P-124442
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.
P-124443
« 1 »
  Strona 1 z 1