STL

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++

STL

Mesajde stelian_2681 » 13 Oct 2016, 00:04

Urmatorul cod nu afiseaza ceea ce doresc.
Concret linia urmatoare:

cout << "\n vector de obiecte de tip Student." << endl;
for (int i=0; i<arr.size(); i++)
cout << " " << arr[i];
cout << endl;


ar trebui sa afiseze vectorul de obiecte de tip Student, insa imi afiseaza "garbage"
acelasi lucru este valabil si pentru list si deque;


Cod: Selectaţi tot
#include <iostream>
#include <cstring>
#include <vector>
#include <list>
#include <queue>
using namespace std;

class Student
{
private:
    int nrMat;
    char nume[20];
public:
    Student(int nr = 0, char *nume = "Student"):nrMat(nr)
    {
        strcpy(this->nume, nume);
        cout << "\n Constructor clasa Student." << endl;
    }
    int getNrMat()
    {
        return nrMat;
    }
    void setNume(char *nume)
    {
        strcpy(this->nume, nume);
    }
    char *getNume()
    {
        return nume;
    }
    Student(const Student &box)
    {
        this->nrMat = box.nrMat;
        strcpy(this->nume, nume);
        cout << "\n Constructor de copiere clasa Student." << endl;
    }
    bool operator< (Student &box)
    {
        return (this->nrMat < box.nrMat);
    }
    friend ostream& operator<< (ostream& box, Student obj)
    {
        box << obj.getNrMat() << " " << obj.getNume() << endl;
        return box;
    }
};

int main()
{
    Student obj1(1, "Mircea");
    Student obj2(2, "Stelian");
    Student obj3(3, "Adrian");

    // vector de date de tip int
    vector<int> tab;
    tab.push_back(11);
    tab.push_back(12);
    tab.push_back(13);

    cout << endl;
    for (int i=0; i<tab.size(); i++)
        cout << " " << tab[i];
    cout << endl;

    // vector de obiecte de tip Student
    vector<Student> arr;
    arr.push_back(obj3);
    arr.push_back(obj2);
    arr.push_back(obj1);

    cout << "\n vector de obiecte de tip Student." << endl;
    for (int i=0; i<arr.size(); i++)
        cout << " " << arr[i];
    cout << endl;

    // lista de date de tip int
    list<int> listInt;
    listInt.push_back(27);
    listInt.push_front(32);
    listInt.insert(listInt.end(), 54);
    listInt.insert(listInt.begin(), 51);
    list<int>::iterator itInt;

    for (itInt=listInt.begin(); itInt!=listInt.end(); itInt++)
        cout << " " << *itInt;
    cout << endl;

    listInt.sort();
    cout << "\n Lista sortata" << endl;
    for (itInt=listInt.begin(); itInt!=listInt.end(); itInt++)
        cout << " " << *itInt;
    cout << endl;

    // lista de obiecte de tip Student
    list<Student> listStudent;
    listStudent.push_back(obj3);
    listStudent.push_back(obj1);
    listStudent.insert(listStudent.end(), obj2);

    list<Student>::iterator itStudent;
    for (itStudent=listStudent.begin(); itStudent!=listStudent.end(); itStudent++)
        cout << " " << *itStudent;
    cout << endl;
    listStudent.sort();

    cout << "\n Lista de studenti sortata" << endl;
    for (itStudent=listStudent.begin(); itStudent!=listStudent.end(); itStudent++)
        cout << " " << *itStudent;
    cout << endl;

    // deque pentru tipuri de date predefinite
    deque<int> deqInt;
    deqInt.push_front(101);
    deqInt.push_back(103);
    deqInt.push_front(106);
    deqInt.push_back(107);
    deque<int>::iterator iInt;
    for (iInt=deqInt.begin(); iInt!=deqInt.end(); iInt++)
        cout << " " << *iInt;
    cout << endl;

    //deque pentru tipuri de date definite de programator
    deque<Student> deqStud;
    deqStud.push_front(obj1);
    deqStud.push_back(obj3);
    deqStud.push_front(obj2);
    deque<Student>::iterator iStud;
    for (iStud = deqStud.begin(); iStud!= deqStud.end(); iStud++)
        cout << " " << *iStud;
    cout << endl;
    return 0;
}
stelian_2681
Junior
Junior
 
Mesaje: 25
Membru din: 24 Iun 2013, 23:25
Judet: Olt

Re: STL

Mesajde Viorel » 13 Oct 2016, 07:53

Corectează constructorul de copiere:

strcpy( this->nume, box.nume );
Viorel
Microsoft MVP
Microsoft MVP
 
Mesaje: 278
Membru din: 13 Iul 2007, 12:26

Re: STL

Mesajde stelian_2681 » 16 Oct 2016, 22:52

Ai dreptate, multumesc!
stelian_2681
Junior
Junior
 
Mesaje: 25
Membru din: 24 Iun 2013, 23:25
Judet: Olt

Re: STL

Mesajde Marius Bancila » 03 Mar 2017, 10:56

Nu mai folosi char[20]. Nu are nici un sens. Foloseste std::string. Nu trebuie sa te mai complici cu astfel de probleme. Clasa ta Student poate sa arate asa:

Cod: Selectaţi tot
class Student
{
private:
    int nrMat;
    std::string nume;
public:
    Student(int nr = 0, std::string const & nume = ""):nrMat(nr), nume(nume)
    {
    }

    int getNrMat() const
    {
        return nrMat;
    }

    void setNume(std::string const & numenou)
    {
         nume = numenou;
    }

    std::string getNume() const
    {
        return nume;
    }

    bool operator< (Student &box)
    {
        return (this->nrMat < box.nrMat);
    }

    friend ostream& operator<< (ostream& box, Student obj)
    {
        box << obj.getNrMat() << " " << obj.getNume() << endl;
        return box;
    }
};


[update]: cand postezi si nu te uiti la data :?
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog
Avatar utilizator
Marius Bancila
Fondator
Fondator
 
Mesaje: 2338
Membru din: 11 Iul 2007, 11:45
Localitate: Timisoara
Judet: Timiş


Înapoi la Limbajul C++

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 3 vizitatori

cron