[C++] Klasy - Dynamiczna alokacja pamięci
Ostatnio zmodyfikowano 2015-08-30 21:28
Frish Temat założony przez niniejszego użytkownika |
[C++] Klasy - Dynamiczna alokacja pamięci » 2015-08-30 18:43:58 Witam tworzę ten temat, ponieważ chciałbym rozwiać swoje wątpliwości co do dynamicznej alokacji pamięci w klasach. Ułożyłem taki kod. #include <iostream>
class Rezerwacja { int * wsk; int rozmiar; int zmienna; public: Rezerwacja( int * w = 0, int r = 0, int z = 0 ) { wsk = w; rozmiar = r; zmienna = z; } void wpisz() { std::cout << "Wpisz rozmiar tablicy: " << std::endl; std::cin >> rozmiar; wsk = new int[ rozmiar ]; for( zmienna = 0; zmienna < rozmiar; zmienna++ ) { *( wsk + zmienna ) = zmienna + rozmiar; } } void wypisz() { std::cout << "--Wypisanie elementow-------" << std::endl; for( zmienna = 0; zmienna < rozmiar; zmienna++ ) { std::cout << " " << *( wsk + zmienna ); } } };
int main( void ) { Rezerwacja tablica; tablica.wpisz(); tablica.wypisz(); return 0; }
Czy w przypadku alokowania jakiegokolwiek miejsca pod zmienne w klasach można alokacje wykonać w miejscu cech obiektu, czyli tu w taki sposób... class Rezerwacja { int rozmiar; int zmienna; int * wsk = new int[ rozmiar ]; public: Rezerwacja( int * w = 0, int r = 0, int z = 0 ) { wsk = w; rozmiar = r; zmienna = z; } (...)
Chciałbym wiedzieć czy istnieje sposób na zapis tego typu. Czy może jest to całkowicie niewykonalne, ponieważ w tym miejscu możemy jedynie umieścić między innymi wskaźnik a rezerwacje pamięci zawsze musimy wykonać w metodzie tak jak każde przypisanie jakiejkolwiek wartości do zmiennej? Proszę o ewentualny przykład najlepiej na moim kodzie:) |
|
pekfos |
» 2015-08-30 19:01:20 Wpisz alokację do konstruktora. Rezerwacja( int * w = 0, int r = 0, int z = 0 )
|
Ty z tym na poważnie..? |
|
Monika90 |
» 2015-08-30 19:46:50 Czy w przypadku alokowania jakiegokolwiek miejsca pod zmienne w klasach można alokacje wykonać w miejscu cech obiektu, czyli tu w taki sposób... |
Jeżeli pytasz czy można instrukcję alokacji umieścić w miejscu gdzie deklarujesz składową, to można, tylko składowa rozmiar musi być zainicjalizowana. Wygląda to tak: class Tablica { public: explicit Tablica( int rozmiar ) : rozmiar( rozmiar ) { } private: int rozmiar; int * wsk = new int[ rozmiar ]; };
Jednak taki kod ma mnóstwo problemów w ogóle, więc w praktyce powinno się to robić tak: class Tablica { public: explicit Tablica( std::size_t rozmiar ) : dane( rozmiar ) { } private: std::vector < int > dane; };
|
|
Frish Temat założony przez niniejszego użytkownika |
» 2015-08-30 21:19:31 Nie, na żarty pekfos. Dzięki za konstruktywną odpowiedz Monika90, ale jednak nie jestem jeszcze na takim etapie(jak wskazał pekfos) bo dopiero wznowiłem naukę programowania, na pewno za jakiś czas Twoją podpowiedź będę w stanie zrozumieć:) |
|
Monika90 |
» 2015-08-30 21:28:21 To jest naprawdę proste: nie używaj new - używaj wektora. |
|
« 1 » |