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

Klasy - tworzenie obiektów

0 głosów
356 wizyt
pytanie zadane 28 marca 2017 w C i C++ przez Akiro Obywatel (1,930 p.)

Witam, próbuje dodać coś w stylu "dynamicznego tworzenia obiektów" w klasach. 

Wygląda to tak: 

int n;  //zmienna dotyczaca liczby obiektow
    cout << "Podaj ile obiektow chcesz stworzyc: ";
    cin >> n;
    Klasa *Obiekt = new Klasa[n];

    for (int i=0; i<n; i++)
    {
    Obiekt[i].tablica_rozmiar();
    Obiekt[i].odsiej();
    Obiekt[i].wyswietl();
    }
    delete [] Obiekt;

Gdy wczytuje poszczególne obiekty, za każdym razem włącza się konstruktor i podmienia zmienne, że praktycznie w tych obiektach zapisują się jakieś błędne dane. 

Kostruktor: 

Klasa (int *x=0, int y=0, int z=0)  //konstruktor 
    {
        cout << "Tutaj konstruktor, przypisuje wlasnie dane startowe do zmiennych :-)" << endl;
        tab = x;
        rozmiar = y;
        granica_gorna=z;

    }

Jakieś sugestie? Wydaje mi się, że dobrze opisałem problem ale w razie problemów ze zrozumieniem chętnie rozwine sytuacje. 

3 odpowiedzi

0 głosów
odpowiedź 28 marca 2017 przez obl Nałogowiec (45,940 p.)
A jakimi danymi byś chciał wypełnić tą dynamicznie utworzoną tablicę obiektów? Widzisz w swoim kodzie wywołanie konstruktora z parametrami, którego fragment kodu zamieściłeś? Nie widzisz? Znaczy się nic nie ustawiasz w swojej tablicy obiektów i spodziewasz się tam znaleźć, no właśnie co?
0 głosów
odpowiedź 29 marca 2017 przez mokrowski VIP (102,940 p.)

Krótka sugestia. Zrezygnuj z tablic na rzecz vector'a. Załatwi Ci i alokację dynamiczną i poprawność inicjalizacji której nie osiągniesz w tablicy. Jeśli masz absolutną konieczność stosowania tablicy, to napisz. Obiekty umieszczane w tablicach dynamicznych, mają absolutne wymaganie by posiadać konstruktor domyślny bezargumentowy. Jeśli alokował byś tablicę na stosie, jest możliwość inicjalizacji argumentami.  Tu masz szkic:

struct Rower {
    Rower(const std::string& nazwa): nazwa(nazwa) {}
};

int main() {
    Rower flota[5] = { "X11", "Górski 3", "Romet"};
}

Innym rozwiązaniem (jeśli upierasz się na tablicę), jest trzymanie wskaźników na obiekty wyprowadzone z klasy. Tylko wtedy.. trzeba sprzątać :-)

–2 głosów
odpowiedź 28 marca 2017 przez arek01996 Stary wyjadacz (12,130 p.)
Do obiektów tworzonych dynamicznie w C++ z tego co pamiętam używało się znaku "->" zamiast "."

Poza tym w żadnym miejscu w kodzie nie wywołujesz konstruktora dlatego ma jakieś randomowe wartości z pamięci. Powinieneś każdy konstruktor teraz w pętli wywołać. coś w stylu Obiekt[i] = new Klasa(int... float... etc)
komentarz 29 marca 2017 przez Akiro Obywatel (1,930 p.)
Nie ma randomowych bo z góry ustaliłem w jego nagłówku.
komentarz 29 marca 2017 przez Criss Mędrzec (169,500 p.)

Do obiektów tworzonych dynamicznie w C++ z tego co pamiętam używało się znaku "->" zamiast "."

-> służy do dostawania się do składowych obiektu na który wskazuje wskaźnik na którym używamy tego operatora.

Poza tym w żadnym miejscu w kodzie nie wywołujesz konstruktora

Konstruktor wywołuje się sam... Tutaj mimo, że konstruktor przyjmuje 3 argumenty, to wszystkie mają wartości domyślne wiec nie wymaga podawania żadnych argumentów. Gdyby nie było takiego konstruktora, w ogóle by się nie skompilowalo  (nie ma możliwości utworzenia tablicy - wymaga domyślnego konstruktora).

Powinieneś każdy konstruktor teraz w pętli wywołać. coś w stylu Obiekt[i] = new Klasa(int... float... etc)

Obiekt [i] to obiekt a operator new zwraca wskaźnik, wiec nie bardzo. 

Podobne pytania

0 głosów
1 odpowiedź 81 wizyt
0 głosów
2 odpowiedzi 63 wizyt
0 głosów
3 odpowiedzi 1,050 wizyt
pytanie zadane 20 września 2017 w Java przez Dethavel Początkujący (280 p.)
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

63,237 zapytań

109,481 odpowiedzi

228,702 komentarzy

43,243 pasjonatów

Przeglądających: 289
Pasjonatów: 18 Gości: 271

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...