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

[C++] Zapis danych ze strumienia, do osobnych obiektów w klasie

Ostatnio zmodyfikowano 2015-05-22 21:04
Autor Wiadomość
GigaByte23
Temat założony przez niniejszego użytkownika
[C++] Zapis danych ze strumienia, do osobnych obiektów w klasie
» 2015-05-22 14:41:18
Witam Szanownych Forumowiczów!

Szlifuję w tej chwili tematy obsługi wyjścia/wejścia,
Otóż mam w tej chwili małą zagwoztkę, prawdopodobnie błahy problem.

Chcę w programie wczytać dane (w tym przypadku produkty wraz z ceną) z pliku tekstowego o następującej treści:


Produkt 1
19,99
Produkt 2
25,99
Produkt 3
13,00
...

Do klasy, przy czym każdy produkt jako osobny obiekt:
(a obiektem będzie "Produkt  + CENA")

C/C++
class items
{
    std::string item_name; //nazwa produktu
    double item_price; //+jego cena
public:
    items();
    items( std::string it_name, std::string it_price );
    void load(); // metoda do wczytywania
};

Przy czym, za bardzo nie orientuję się Jak automatycznie wczytać dane jako osobne obiekty (np. o1, o2 itd.), podając jedynie plik (ścieżkę do pliku) bez deklarowania ich w "int main();"


P-132607
JMII89
» 2015-05-22 14:48:45
Przejedź się po pliku , zlicz ilość produktów i stwórz dynamicznie obiekty klasy.Potem w pętli możesz się do nich odwołać.
P-132610
GigaByte23
Temat założony przez niniejszego użytkownika
» 2015-05-22 17:04:26
Co do zliczania produktów - ten fakt nigdy nie będzie na sztywno, bo użytkownik będzie dopisywał do pliku produkty, ewentualnie usuwał.

Wydziergałem coś takiego:
C/C++
void items::load( string _p )
{
    string _path = _p;
    fstream tempFile;
    tempFile.open( _path, ios::in );
    if( tempFile.good() == false )
    {
        perror( "Blad lub niewlasciwy plik!" );
        exit( 1 );
    }
    string streambuf;
    int tmp = 0;
    while( getline( tempFile, streambuf ) )
    {
        if( tmp % 2 == false )
        {
            item_name = streambuf;
        }
        if( tmp % 2 == true )
        {
            item_price = streambuf;
            // tutaj tymczasowo zamieniłem double w klasie na std::string
        };
        tmp++;
    }
    tempFile.close();
    streambuf.clear();
}

Z tymże w dalszym ciągu nie wiem jak stworzyć nowe obiekty, ani też nie mam kontroli nad tym co wczytuje.
P-132624
JMII89
» 2015-05-22 21:04:32
Możesz zrobić coś takiego. Jednak lepiej użyć vectora , niż starych wskaźników.

C/C++
items::items( std::string temp_nazwa, double temp_item_price )
{
    item_name = temp_nazwa;
    item_price = temp_item_price;
}

std::string linia;
int line = 0;
std::vector < items > Items;

std::string temp_nazwa;
double temp_item_price;

while( getline( plik, linia ) )
{
    if( line % 2 == 0 )
    {
        temp_nazwa = linia;
    }
   
    else
    {
        temp_item_price = atof( linia.c_str() );
        Items.push_back( items( temp_nazwa, temp_item_price ) );
    }
   
    line++;
}

Wtedy możesz używać normalnie metody push_back i dodawać produkty do vectora lub je usuwać .
P-132636
« 1 »
  Strona 1 z 1