• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] Jak zabierać zmienne z metod pewnej klasy do funkcji main?

VPS Starter Arubacloud
0 głosów
588 wizyt
pytanie zadane 25 lutego 2016 w C i C++ przez Mikołaj Popieluch Nowicjusz (150 p.)
Otóż uczę się programować w c++ umiem pewne podstawy, zacząłem pisać sobie coś aby sprawdzić swoją wiedzę. I wiadomo korzystać z nowych sposobów zobaczyć po prostu z czym to się je. Natknąłem się na pewien kłopot ponieważ stworzyłem klasę i w tej klasie stworzyłem metodę. W tejże metodzie znajdują się dwie zmienne które ta metoda pobiera od użytkownika. Chciałbym aby po przywołaniu tej metody w funkcji main() można było użyć te dwie zmienne chociażby w zwykłym std::cout. Prosiłbym o pomoc. Z góry dziękuję :)

3 odpowiedzi

+1 głos
odpowiedź 25 lutego 2016 przez criss Mędrzec (172,590 p.)
wybrane 25 lutego 2016 przez Mikołaj Popieluch
 
Najlepsza
Tzn. zmienne są tworzone w metodzie? Więc musisz jakoś wydobyć te wartości (bo chodzi tylko o wartości?). Tak więc metoda musi je zwracać (jako, że sa dwie, to w jakiejś strukturze czy std::pair), albo przyjmować jako argument referencje, do których zapisze te wartości.

Nie wiem jak bardzo podstawowe są wspomniane przez ciebie "pewne podstawy", więc pytaj, jeśli nie zrozumiałeś wszystkiego.
komentarz 25 lutego 2016 przez Mikołaj Popieluch Nowicjusz (150 p.)
Tak zmienne są tworzone w metodzie, tak dokładniej to są dwa stringi i chciałbym abym mógł wywołać je w funkcji main().

Moja wiedza na szczęście pozwoliła mi zrozumieć, jednakże wolałbym uniknąć używania std::pair.

Jeśli jest inne rozwiązanie mojego problemu bardzo bym prosił o pomoc.

Dziękuję za odpowiedź! :)
komentarz 25 lutego 2016 przez criss Mędrzec (172,590 p.)

Najprościej chyba jest w takiej strukturze. 

Inna możliwość to już wspomniane referencje. Załóżmy, że tak wygląda twoja funkcja:

void f(int& _a, int& _b)
{
     int a, b;
     std::cin >> a >> b;
     _a = a;
     _b = b;
}

Teraz używając jej:

int x, y; // zmienne do których f zapisze input
f(x, y);

Kolejny sposób to tablica alokowana dynamicznie. Funkcja w swoim ciele tworzy tablice (alokuje pamięć), zapisuje do niej input i zwraca wskaźnik:

int* f()
{
int a, b;
std::cin >> a >> b;
int* ptr = new int[2];
ptr[0] = a;
ptr[1] = b;
return ptr;
}

Małym problemem jest, że dynamicznie alokujesz pamięć wewnątrz funkcji i musisz pamiętać o zwolnieniu jej. Raczej nie powinno się tak robić ze względu na przejrzystość kodu i właśnie możliwość zapomnienia.

Rozwiązaniem jest przekazywanie do funkcji tablicy jako argument. Wtedy nawet nie ma potrzeby alokowania jej dynamicznie. Także deklaracja:

void f(int* _array);
//albo
void f(int _array[ ]);

Napisałem dwie możliwości, bo kompilator może się czepiać o typ przekazywanego argumentu jeśli tablice zadeklarowałeś klasycznie (int tab[5]), a funkcja przyjmuje int*. Tablicy nie trzeba przekazywać przez referencje, bo przekazując tablice - przekazujemy wskaźnik, a więc konkretny adres w pamięci.

 

komentarz 25 lutego 2016 przez Mikołaj Popieluch Nowicjusz (150 p.)
Dziękuję bardzo za wyczerpującą odpowiedź! :)
+1 głos
odpowiedź 25 lutego 2016 przez MetGang Nałogowiec (34,360 p.)

Jeśli dwie zmienne muszą być zwrócone to albo std::pair, albo std::tuple, albo własna struktura/klasa przechowująca dwie zmienne i dodatkowo przydałoby się przeciążyć funkcję operatorową << klasy ostream (łatwo znalexć w necie) jeśli chcesz ich użyć obu naraz w cout. Lecz równie dobrze, możesz dodać dwa stringi i zwrócić jako jeden ^^'

0 głosów
odpowiedź 25 lutego 2016 przez niezalogowany
Możesz zadeklarować zmienne-składowe klasy, za pomocą tej metody je modyfikować, a zwracały by je dodatkowe dwie metody.

Podobne pytania

0 głosów
2 odpowiedzi 181 wizyt
pytanie zadane 16 października 2016 w C i C++ przez Animal Użytkownik (700 p.)
–1 głos
2 odpowiedzi 167 wizyt
0 głosów
1 odpowiedź 319 wizyt
pytanie zadane 10 marca 2018 w C i C++ przez dasad33 Użytkownik (710 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...