C++ 11 initializer_list
Ostatnio zmodyfikowano 2018-03-09 10:10
aram100 Temat założony przez niniejszego użytkownika |
C++ 11 initializer_list » 2018-03-08 21:08:15 Hej, mam klasę Book, a w niej dwa prywatne stringi: autor i tytul. Jak zrobić wewnątrz tej klasy taką listę:
EDIT - trochę chyba nie zrozumiałem zadania.
Ogólnie nie wiem jak zrobić kontruktor abym mógł tak inicjalizować obiekty.
Book ksiazka = {"A. A. Milne", "Kubus Puchatek"}; |
|
pekfos |
» 2018-03-08 21:14:42 W twoim przypadku, initializer_list to nie jest poprawne rozwiązanie. Book ksiazka = { "A. A. Milne", "Kubus Puchatek" };
Masz tu jasno autora i tytuł, więc konstruktor powinien przyjmować takie właśnie 2 argumenty. initializer_list jest do przypadku, w którym ilość danych jest nieokreślona. Czym byłby tu trzeci napis? Drugi tytuł, czy autor? A może "Kubuś Puchatek" stałby się wtedy drugim autorem..? Ten kod ma tyle błędów, że 'poprawka' może być nieodpowiednim określeniem. |
|
aram100 Temat założony przez niniejszego użytkownika |
» 2018-03-08 21:20:15 Ten kod to pomyłka, zobaczyłem coś takiego przy okazji i myślałem że trzeba tego użyć.
|
|
latajacaryba |
» 2018-03-08 22:45:08 class Book { std::vector < std::string > authors; std::string title; public: Book( std::initializer_list < std::string > list ) { title = * list.begin(); for( auto i = list.begin() + 1; i < list.end(); ++i ) authors.push_back( * i ); } void info() { std::cout << "title: " << title << "\nauthors: "; for( const auto i: authors ) { std::cout << i << ","; } } };
int main() { Book x { "tytul", "autor1", "autor2", "autor3" }; x.info(); }
|
|
geceves |
» 2018-03-09 10:10:22 @latajacaryba, niepotrzebnie, skoro masz std::vector to lepiej użyć jego konstruktora i odseparować tytuł od autorów, i nie musieć tego dzielić ręcznie. int main() { Book x { "tytul", { "autor1", "autor2", "autor3" } }; x.info(); }
|
|
« 1 » |