Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

c++ referencja


Rekomendowane odpowiedzi

Opublikowano

Cześć ;)

 

 

Mam problem z refencją.. :/

 

Mam do napisania program, który za pomocą refencji zamieni mi wartosci zmiennych. Wcześniej te wartosci zamieniam wskaźnikami i jest ok ale jak juz zamienie wartosci z pomoca referencji to zmienne maja identyczne wartosci w zaleznosci ktora byla podana wczesniej

 

 

switch(zm3) {
      case 'x':
      case 'X':
                p = x;
                
                if(zm4 == 'y' || zm4 == 'Y') {
                    int &rx = y;
                    y = p;
                    
                    cout<<"Adres X: "<<wx<<"\t\tWartosc X: "<<rx<<endl;
                    cout<<"Adres Y: "<<wy<<"\t\tWartosc Y: "<<y<<endl;
                    cout<<"Adres Z: "<<wz<<"\t\tWartosc Z: "<<*wz<<endl;
                }
                else if(zm4 == 'z' || zm4 == 'Z') {
                    int &rx = z;
                    z = p;
                    
                    cout<<"Adres X: "<<wx<<"\t\tWartosc X: "<<rx<<endl;
                    cout<<"Adres Y: "<<wy<<"\t\tWartosc Y: "<<*wy<<endl;
                    cout<<"Adres Z: "<<wz<<"\t\tWartosc Z: "<<z<<endl;
                }
                else {
                    cout<<"Nie mozesz podac tej samej zmiennej do zamiany! ;(\n";
                }
                
                break;
                    
      case 'y':
      case 'Y':
               p = y;
                
                if(zm4 == 'x' || zm4 == 'X') {
                    int &ry = x;
                    x = p;
                    
                    cout<<"Adres X: "<<wx<<"\t\tWartosc X: "<<x<<endl;
                    cout<<"Adres Y: "<<wy<<"\t\tWartosc Y: "<<ry<<endl;
                    cout<<"Adres Z: "<<wz<<"\t\tWartosc Z: "<<*wz<<endl;
                }
                else if(zm4 == 'z' || zm4 == 'Z') {
                    int &ry = z;
                    z = p;
                    
                    cout<<"Adres X: "<<wx<<"\t\tWartosc X: "<<*wx<<endl;
                    cout<<"Adres Y: "<<wy<<"\t\tWartosc Y: "<<ry<<endl;
                    cout<<"Adres Z: "<<wz<<"\t\tWartosc Z: "<<z<<endl;
                }
                else {
                    cout<<"Nie mozesz podac tej samej zmiennej do zamiany! ;(\n";
                }
                
                break;
                
      case 'z':
      case 'Z':
                p = z;
                
                if(zm4 == 'x' || zm4 == 'X') {
                    int &rz = x;
                    x = p;
                    
                    cout<<"Adres X: "<<wx<<"\t\tWartosc X: "<<x<<endl;
                    cout<<"Adres Y: "<<wy<<"\t\tWartosc Y: "<<*wy<<endl;
                    cout<<"Adres Z: "<<wz<<"\t\tWartosc Z: "<<rz<<endl;
                }
                else if(zm4 == 'y' || zm4 == 'Y') {
                    int &rz = y;
                    y = p;
                    
                    cout<<"Adres X: "<<wx<<"\t\tWartosc X: "<<*wx<<endl;
                    cout<<"Adres Y: "<<wy<<"\t\tWartosc Y: "<<y<<endl;
                    cout<<"Adres Z: "<<wz<<"\t\tWartosc Z: "<<rz<<endl;
                }
                else {
                    cout<<"Nie mozesz podac tej samej zmiennej do zamiany! ;(\n";
                }
                
                break;
  }

Obama wie, co robisz!!!
131894.jpg                                                                                                                                                    4906167742.png

                                                                                                                                                                                                                                                                                      LTE Play Opole

Opublikowano

Brzydki kod, bez żadnych komentarzy, który nie wiadomo co ma robić. Jak mamy ci pomóc?

 

Referencje w C++ działają w następujący sposób

 

void foo(int& bar)

{

   bar = 5;

}

 

ewentualnie

 

int abc = 10;

int& ref = abc;

ref = 20;

std::cout << abc; // wypisze 20

RAsfepN.png
Opublikowano

Na twoim miejscu to ja bym to przepisał od nowa, ta zmienna p to też nie wiadomo co tam robi.

W if'ach ci dużo powtarza, wyciągnij powtarzający się element poza if'a.

Zmienne pojawiają się i znikają.

int *rx = &y;
cout<<"Adres X: "<<wx<<"\t\tWartosc X: "<<*rx<<endl;

To jest przykład dla zm3 = 'x'

Tylko, to jest mega sztuczne. W twoim uczeniu się o referencjach to sądzę, że na pierwszy ogień powinieneś wziąć przekazywanie referencji w argumentach funkcji, a nie w obrębie tej samej funkcji.

TuByłaSygnatura.png

Opublikowano

Bardzo rzadko uzywa sie konstrukcji " int &a=b; " wewnatrz funkcji.

Raczej chodzilo o to, abys zadeklarowal funkcje

 

void rob_cos(int& a);

 

w ten sposob zmienna zostanie przekazana nie przez kopie, lecz "przez adres w pamieci", dlatego operujesz na orginalnej zmiennej i mozesz oczekiwac, ze po wykonaniu takiej funckji wartosc orginalu sie zmieni. Nie powstanie zadna kopia jak w przypadku

void rob_cos(int a);

Opublikowano

Bardzo rzadko uzywa sie konstrukcji " int &a=b; " wewnatrz funkcji.

Raczej chodzilo o to, abys zadeklarowal funkcje

 

void rob_cos(int& a);

 

w ten sposob zmienna zostanie przekazana nie przez kopie, lecz "przez adres w pamieci", dlatego operujesz na orginalnej zmiennej i mozesz oczekiwac, ze po wykonaniu takiej funckji wartosc orginalu sie zmieni. Nie powstanie zadna kopia jak w przypadku

void rob_cos(int a);

Dzięki! ;) Nie pomyślałem żeby zrobić to przez funkcje xD uparłem się że będzie to bez nich ale jak to był duży błąd ;)

 

 

Temat do zamknięcia

Obama wie, co robisz!!!
131894.jpg                                                                                                                                                    4906167742.png

                                                                                                                                                                                                                                                                                      LTE Play Opole

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...