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

[C++] Klasy - Dynamiczna alokacja pamięci

Ostatnio zmodyfikowano 2015-08-30 21:28
Autor Wiadomość
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.
C/C++
#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...
C/C++
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:)
P-137063
pekfos
» 2015-08-30 19:01:20
Wpisz alokację do konstruktora.

C/C++
Rezerwacja( int * w = 0, int r = 0, int z = 0 )
C/C++
Rezerwacja tablica;
Ty z tym na poważnie..?
P-137064
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:
C/C++
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:
C/C++
class Tablica
{
public:
    explicit Tablica( std::size_t rozmiar )
        : dane( rozmiar )
    { }
   
private:
    std::vector < int > dane;
};
P-137066
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ć:)
P-137071
Monika90
» 2015-08-30 21:28:21
To jest naprawdę proste: nie używaj new - używaj wektora.
P-137074
« 1 »
  Strona 1 z 1