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

C++ 11 initializer_list

Ostatnio zmodyfikowano 2018-03-09 10:10
Autor Wiadomość
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"};
P-169850
pekfos
» 2018-03-08 21:14:42
W twoim przypadku, initializer_list to nie jest poprawne rozwiązanie.
C/C++
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..?

C/C++
//DO POPRAWKI
Ten kod ma tyle błędów, że 'poprawka' może być nieodpowiednim określeniem.
P-169851
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ć.
P-169853
latajacaryba
» 2018-03-08 22:45:08
C/C++
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();
}
P-169855
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.

C/C++
int main()
{
    Book x { "tytul", { "autor1", "autor2", "autor3" } }; //std::string, std::vector
    x.info();
}
P-169857
« 1 »
  Strona 1 z 1