Pokaż wyniki 1 do 3 z 3

Temat: kontener

  1. #1

    Domyślnie kontener

    Hej!
    Chcialabym napisac taki prosty programik skladajacy sie z 2 klas:
    klasa osoba i klasa wektor, ktora przechowuje obiekty klasy osoba.

    Oto moj rezultat:
    Kod:
    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    class osoba
    {
                    char nazwisko[30];
            public:
                    osoba(const char* n = NULL)
                    {strcpy(nazwisko, (n ? n: "null"));}
                    //------------------------
                    friend  ostream &operator<<(ostream &s, const osoba &o);
                    friend  ostream &operator<<(ostream &s, const osoba *wsk);
    };
    
    ostream &operator<<(ostream &s, const osoba &o)
    {
            s<< o.nazwisko;
            return s;
    }
    
    class wektor
    {
            vector<osoba>tabl;
            int ile_obiektow;
    
            public:
                    wektor(): ile_obiektow(0){};
                    int wstaw(const osoba &nowy, int gdzie = -1);
                    void usun(int nr);
                    friend ostream& operator<<(ostream &stru, wektor &spis);
    };
    
    oostream& operator<<(ostream& stru, wektor& spis)
    {
            stru<< "   ";
            for (int i = 0; i<spis.size(); i++)
            {
                    stru << i <<")"
                            << spis.tabl[i]<<" ";
            }
            stru << endl;
            return stru;
    }
    int wektor:: wstaw(const osoba &nowy, int gdzie)
    {
    
    
            if(ile_obiektow == pojemnosc_wektora)
            {
                    cout<<"wektor juz zapelnionych\n";
                    return 0;
            }
            if(gdzie < 0 || gdzie > ile_obiektow)
            {
                    gdzie = ile_obiektow;
            }
            rozsun(gdzie);
            tab.push_back(nowy);
            ile_obiektow++;
            return 1;
    Chcialabym zapytac jak w akiej sytuacji powinno wygladac wyswieltanie wartosci wektora w funkici operatora <<

    Bede niezmiernie wdzieczna za wskazowki.

  2. #2

    Post

    • strcpy nie sprawdza rozmiaru bufora, lepiej używać strncpy, np. strncpy(nazwisko, (n ? n : "null"), 29);. Nie lepiej byłoby Ci użyć std::string zamiast surowej tablicy?
    • std::vector pozwla odczytać liczbę przechowywanych elementów metodą .size(), nie musisz tej danej trzymac oddzielnie.
    • Twoja klasa wektor nie ma metody .size(), chyba chodziło Ci o spis.tabl.size() w operator<<.
    • Co to za zmienna pojemnosc_wektora, której używasz w wstaw?
    • std::vector posiada metodę insert, która wstawia nowy element w dowolne miejsce (co prawda używa std iteratorów zamiast indeksów, ale z indeksu łatwo uzyskać iterator).
    Cytat Napisał Gosik Zobacz post
    Chcialabym zapytac jak w akiej sytuacji powinno wygladac wyswieltanie wartosci wektora w funkici operatora <<
    Hmmm..., chyba nie dokońca rozumiem pytanie.
    Takiego operatora << używasz razem z jakimś obiektem klasy ostream lub pochodnej (co z resztą robisz nawet w tym operatorze << przyjmującym obiekty klasy wektor, wypisujesz obiekty klasy osoba używając operatora << przyjmującego obiekty kalsy osoba)
    Kod:
    wektor w;
    //...
    cout << w;
    ofstream plik("plik.txt");
    plik << w;
    PS. Możesz poczytać C++ – DarkCult (część Podstawy STL i dział Biblioteka standardowa) jako krótki wstęp a dalej korzystać z C++ Reference
    Ostatnio edytowane przez Rolek : 04-15-2013 - 20:15
    Niniejszy post przedstawia opinie autora w dniu dzisiejszym, na datę jego publikacji. Nie mogą być one wykorzystane przeciwko niemu w dniu jutrzejszym, ani innym następującym po nim dniu. Autor zastrzega sobie prawo do zmiany poglądów bez podawania przyczyn.

  3. #3

    Domyślnie

    Oto mi chodzilo. Wielkie dzieki za pomoc.

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj