Konstruktor z initializer list

Konstruktor z initializer list
A1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Witam

Mam klasę Song, a w niej dwa prywatne stringi - jeden dla autora i jeden dla tytułu.

Teraz mam stworzyć klasę Disc, która zawiera tablicę tych piosenek z konstruktorem wykorzystującym initializer_list.

Mam z tym problem, moja klasa ma potem tworzyć obiekty w taki sposób:

Kopiuj
Disc record = {{"Popek", "Albański raj"},
{"Bonus RPK", "Nabuzowany dzieciak"}};

Albo 3-4 naraz.

Kopiuj
class Disc {
	Song* array;
	size_t size;
public:

	Disc() {
		cout << "Konstruktor bezparametrowy" << endl;
	}

	LDisc(initializer_list<Song> list) : size{ list.size() }, array{new Song[list.size()]} {
		cout << "Konstruktor z lista inicjalizacyjna" << endl;
		size_t i = 0;    //
		// DALEJ NIE WIEM
	}

JAK TO DOKOŃCZYĆ?

pingwindyktator
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1055
1

Jakbyś użył jak człowiek biały std::vector, to pewnie byłoby łatwiej, bo ów posiada konstruktor, który przyjmuje std::initializer_list.
I jeszcze jedno - LDisc(initializer_list<Song> list) - dlaczego LDisc?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

forma naiwna:

Kopiuj
for (size_t i=0; i<size; i++)
	array[i] = list.begin()[i];
pingwindyktator
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1055
0
Azarien napisał(a):

forma naiwna:
...

Nie. Nie tak.
Tak:

Kopiuj
class Disc {
    std::vector<Song> array;

public:
    Disc() {
        cout << "Konstruktor bezparametrowy" << endl;
    }
 
    Disc(initializer_list<Song> list) : array(list) { }
};

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.