Inicjalizowanie tablicy dynamicznej obiektów

0

hej.
Potrzebuje stworzyć dynamiczną tablice obiektów klasy CKlasa ta klasa ma konstruktor z 2 argumentami (int,int)</code> znam ilosc obiektów tj <code>10
Czy takie coś jest ok? bo coś nie chce mi działać.

Cklasa *obiekt;
obiekt=new Klasa[];
obiekt[10]={{1,2},{2,3},{3,4},{4,5}...}
 
3

nie mozesz tak zrobic. musialbys od razu przy definicji tablicy deklarowac, ale lepiej zrobic to tak

  1. Zamiast tablicy uzyj std::vector
  2. rob emplace_back(Twojeargumenty)
std::vector<Cklasa> myVec;
for (int i = 0 ; i < 10; i++)
{
    myVec.emplace_back(i+1, i+2);
}
  1. Nie uzywaj new/delete. Zapoznaj sie z RAII (zacznij od smart pointerow)
0

Nie mogę, mam to na zaliczenie a jakiś baran każe mi z tablicy statycznej gdzie mam zrobione
Cklasa obiekt[9]={{1,2},{3,2}...};

Zrobić tablice dynamiczną

0

to musisz przepisac, stworzyc tablice dynamiczna o takiej wielkosci jak masz statyczna i po prostu przekopiowac do dynamicznej.

3

Nie jest ok. Nie używaj nagiego new i delete. To antyidiom w C++. Użyj std::vector.

vector<CKlasa> vec{ {1,2}, {2,3}, {3,4} };
0

To jak stworzyć tą dynamiczną?

 Cklasa obiekt[]={
{1,2},{3,4},{5,6}..

};


?
i to jest ta cała klasa dynamiczna wykonana poprawnie. Nie mogę używać <vector>

0

Nie da się tworzyć "tablicy dynamicznej" jeżeli Twoja klasa nie ma konstruktora bezparametrowego. Chyba że chodzi o użycie placement new w co bardzo wątpię.

0

Chwila chwila, czy ty teraz masz to zaliczenie?

0

To co ja mam zrobić?
Co mam powiedzieć temu idiocie?
Vectory mu nie pasują.
To pokażcie jakikolwiek przykładową tablice dynamiczną

0

Nie, nie mam teraz zaliczenia w postaci jakiegoś kolokwium czy coś. Po prostu muszę prawić projekt, to tak sobie "szef" zażyczył

0

W takim razie napisz swój własny, uproszczony vector.

0

A możesz powiedzieć mi jak to zrobić?
Bo zabardzo nie wiem jak

0

Możecie pokazać jak poprawnie wykonać tablice dynamiczną klasy bez konstruktora?
Cklasa *obiekt[10]

Tak jest poprawnie?

0

Spytaj wykładowcę co konkretnie ma na myśli, bo

CKlasa* tab = new CKlasa[10]

nie przejdzie bez konstruktora bezparametrowego.

0

Tylko tyle wiem.
Ma być tablica dynamiczna i tyle w temacie.
I muszę mieć to już gotowe.

0
twonek napisał(a):

Spytaj wykładowcę co konkretnie ma na myśli, bo

CKlasa* tab = new CKlasa[10]

nie przejdzie bez konstruktora bezparametrowego.

bez obrazy ale za przeproszeniem to chyba jaja sobie robisz ;]

rozwiązań może być wiele, nawet vector (a lepiej by to wyglądało na tablice dynamiczną gdyby przydzielił pamięć poprzez zmienną), smart pointer również nawet do klasycznego rozwiązania (nawet w C++11 dla tablicy trzeba podać destruktor to nawet przy tym rozwiązaniu by zaplusował gdyż smrt_ptr od dawna znane choć nie w starym standardzie itp. itd...)...

w tablicy dynamicznej jeśli by nie podał zmiennej to też różnie może być zinterpretowane - iż nie wie jaka różnica...

na tyle poświęcił przynajmniej czasu i nie od razu prosił o gotowca, + możliwe, że będzie musiał wytłumaczyć działania kodu, że...

klasyczny kod przykład:

#include <iostream>

using namespace std;

class CKlasa
{
public:
    int i, j;
};

int main(int argc, char *argv[])
{
    unsigned int elementow_ui = 10;
    CKlasa* cklasa_array = new CKlasa[elementow_ui];
    CKlasa *cklasa_ptr, *cklasa_ptr_end;

    int i(0);
    cklasa_ptr = cklasa_array; // begin
    cklasa_ptr_end = cklasa_ptr + elementow_ui; // end
    while(cklasa_ptr!=cklasa_ptr_end){
        cklasa_ptr->i = ++i;
        cklasa_ptr->j = ++i;
        ++cklasa_ptr;
    }

    cklasa_ptr = cklasa_array; // begin

    while(cklasa_ptr!=cklasa_ptr_end){
        cout << cklasa_ptr->i << ' ' << cklasa_ptr->j << endl;
        ++cklasa_ptr;
    }

    delete[] cklasa_array;
    return 0;
}
5

W standardzie C++11 można to zrealizować tak:

 
CKlasa* obiekty = new CKlasa[10]{{1,2},{2,3},{3,4},{4,5},{5,6},{6,7},{7,8},{8,9},{9,10},{10,11}};

1 użytkowników online, w tym zalogowanych: 0, gości: 1