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

[C++] Nazwy lokalne / przesłanianie nazw zmiennych

Ostatnio zmodyfikowano 2014-02-05 15:58
Autor Wiadomość
jakuszek
Temat założony przez niniejszego użytkownika
[C++] Nazwy lokalne / przesłanianie nazw zmiennych
» 2014-01-26 15:16:53
Cześć.

Krótko i na temat:

Przerabiam książkę Grębosza i jest tam jedno ćwiczenie którego nie potrafię rozwiązać:

C/C++
#include <iostream>

using namespace std;

int zmienna = 3;
int main()
{
    {
        int zmienna = 6;
        {
            int zmienna = 9;
            cout << zmienna << endl;
            cout <<::zmienna << endl;
        }
    }
    system( "pause" );
}

W bloku który jest 'najgłębiej' zagnieżdżony wyrzucam na ekran nazwę 'zmienna'. Wewnątrz tego bloku mogę dotrzeć do zmiennej o wartości 9 oraz do nazwy globalnej o wartości 3. Nie wiem jednak jak dotrzeć do nazwy o wartości 6 bez wychodzenia z bloku, tzn tej będącej o jeden poziom wyżej.

Byłbym wdzięczny za pomoc.
P-103253
Monika90
» 2014-01-26 15:19:47
Nie wiem jednak jak dotrzeć do nazwy o wartości 6
Nie da się.
P-103254
kitsss
» 2014-02-03 00:26:19
Doszło tutaj do zasłonięcia nazwy, więc nic się nie poradzi. Chyba, że dysponujesz nieograniczonymi sposobami, to możesz utworzyć i pokazać wskaźnik na tamtejszą zmienną równą 6 i pokazać go cout'em nawet w tej  najbardziej zagnieżdżonej klamrze. Nie wiem czy dobrze mówię, jak sprawdziłem praktycznie na kompilatorze, to te same zmienne (oczywiście zasłonięte nazwą) posiadają różne adresy. Tą metodą wskaźnikową akurat się udało.
P-103910
jakuszek
Temat założony przez niniejszego użytkownika
» 2014-02-04 13:16:56
Faktycznie, nie wpadłem na to by użyć wskaźników.

Wytłumaczyć się mogę jedynie tym, że C++ znam pobieżnie i jeszcze nie przewałkowałem w mojej książce tematu wskaźników.

Wklejam poniżej kod z rozwiązaniem. Jeżeli ktoś ma inne lepsze/gorsze pomysły rozwiązania "problemu" i chciałby go przedstawić to z chęcią się z nimi zapoznam.

C/C++
#include <iostream>

using namespace std;
int * wskaznik;
int zmienna = 3;
int main()
{
    {
        int zmienna = 6;
        wskaznik = & zmienna;
        {
            int zmienna = 9;
            cout << zmienna << endl;
            cout << * wskaznik << endl;
            cout <<::zmienna << endl;
        }
    }
    system( "pause" );
}
P-103955
MrPoxipol
» 2014-02-05 09:25:13
Możesz użyć bezpieczniejszych referencji do zmiennej.
P-104021
jakuszek
Temat założony przez niniejszego użytkownika
» 2014-02-05 15:58:26
Dzięki za podpowiedź.

Poniżej kolejna wersja 'kodu':)
C/C++
#include <iostream>

using namespace std;
int zmienna = 3;
int main()
{
    {
        int zmienna = 6;
        int & referencja = zmienna;
        {
            int zmienna = 9;
            cout << zmienna << endl;
            cout << referencja << endl;
            cout <<::zmienna << endl;
        }
    }
    system( "pause" );
}

Jeżeli ktoś jeszcze chciałby przedstawić inne rozwiązanie mojego "problemu" to będę wdzięczny :)
P-104044
« 1 »
  Strona 1 z 1