• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c++ vectory obiektów

Object Storage Arubacloud
0 głosów
155 wizyt
pytanie zadane 1 listopada 2020 w C i C++ przez milosz123 Użytkownik (720 p.)
Witam zaczynam powoli naukę klas,metod i obiektów i robię zadanie które polaga na stworzeniu tablicy obiektów i to już ogarnąłem ale chciałbym się dowiedzieć czy można robić vectory z obiektami a jeśli tak to prosił bym o drobną pomoc bo z moich prób zbytnio nic nie działało.

2 odpowiedzi

+1 głos
odpowiedź 1 listopada 2020 przez draghan VIP (106,230 p.)
wybrane 1 listopada 2020 przez milosz123
 
Najlepsza

Tak, można.

Jeśli znasz podstawową obsługę std::vector, to utworzenie i używanie vectora obiektów Twojej własnej klasy nie powinno sprawić Ci trudności.

Najprostszy przykład:

#include <vector>

class MyClass
{
};

int main()
{
    std::vector<MyClass> vector_of_my_objects;
    vector_of_my_objects.push_back(MyClass());
    // ...
}

 

komentarz 1 listopada 2020 przez milosz123 Użytkownik (720 p.)
Muszę się douczyć jeśli chodzi o wszystkie możliwości wektorów
komentarz 1 listopada 2020 przez milosz123 Użytkownik (720 p.)

Użyłem metody emplace_back i po po kolejnych jej użyciach  zwraca mi destruktor dla elementu znajdującego się na miejscu wcześniej czy tak powinno być ?

class Being {
private:
    string name;
public:
    int age;
    double length;
    double weight;
    double width;

    Being(string name, int age, double length, double weight, double width) {
        this->name = name;
        this->age = age;
        this->length = length;
        this->weight = weight;
        this->width = width;
    }
    string ShowName() {
        return this->name;
    }
    int ShowAge() {
        return this->age;
    }
    double ShowLength() {
        return this->length;
    }
    double ShowWeigth() {
        return this->weight;
    }
    double ShowWidth() {
        return this->width;
    }
    ~Being() {
        cout << "Po istocie " << this->name << "\n";
    };
};

class Mammal : public Being {
private:
    string Gender;
public:
    Mammal(string, string, int, double, double, double);
};

class Dog : public Mammal {
private:
    string race;
    double speed;
public:
    Dog(string,double,string, string, int, double, double, double);

    void Bark() {
        cout << "How How How How\n";
    }

    void operator *(unsigned N) {
        for (int i = 0; i < N; i++) this->Bark();
    }
    int operator <(Dog *pies) {
        if(this->age < pies->age) return true;
        else return false;
    }
    Dog operator +(Dog *pies) {
        return Dog("Dalmatynczyk",25,"Pies","Pies",7,6,70,16);
    }

    string ShowRace() {
        return this->race;
    }
    double ShowSpeed() {
        return this->speed;
    }
};

int main() {

    vector<Dog> tab;

    tab.emplace_back("Owczarek Niemiecki",10,"Pies","Gucio",5,1,89,1);
    tab.emplace_back("Haski",67,"Pies","Popo",4,6,768,16);
    tab.emplace_back("Haski",67,"Pies","Pods",4,6,768,16);
    tab.emplace_back("Haski",67,"Pies","Pew",4,6,768,16);

    cout << tab[0].ShowName() << "\n";
    cout << tab[1].ShowName() << "\n";

    return 0;
}

Mammal::Mammal(string Gender, string name, int age, double length, double weight, double width) : Being(name,age,length,weight,width) {
        this->Gender = Gender;
}

Dog::Dog(string race, double speed, string Gender, string name, int age, double length, double weight, double width) : Mammal(Gender,name,age,length,weight,width) {
    this->race = race;
    this->speed = speed;
}

 

komentarz 1 listopada 2020 przez j23 Mędrzec (194,920 p.)

Nie wiem, czy dobrze zrozumiałem pytanie, ale w trakcie wstawiania nowego elementu mogą "wyświetlić" się destruktory wstawionych wcześniej obiektów. Dzieje się tak, bo vector co jakiś czas musi realokować blok pamięci, w której znajdują się obiekty.

komentarz 1 listopada 2020 przez milosz123 Użytkownik (720 p.)
Acha czyli jak dobrze rozumiem po relokacji z tych obiektów dalej można normalnie kożystać i dalej znajdują się normalnie w vektorze
komentarz 1 listopada 2020 przez tkz Nałogowiec (42,000 p.)
Z wektorem jest tak jakbyś przenosił ubrania z mniejszej szafki do większej. Nadal możesz z nich korzystać, ciągłość jest zachowana. Niekoniecznie będą pod tym samym, surowym wskaźnikiem. Niejako metoda reserve https://en.cppreference.com/w/cpp/container/vector/reserve rozwiązuje ten problem, bo od razu bierzesz większa szafkę na rzeczy.
0 głosów
odpowiedź 1 listopada 2020 przez Michałełe Nałogowiec (25,600 p.)

Rozumiem, że masz coś takiego na myśli:

std::vector<moja_klasa> vec;

 

Podobne pytania

0 głosów
2 odpowiedzi 366 wizyt
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 19 stycznia 2023 w C i C++ przez krzysztof.polak Nowicjusz (120 p.)
0 głosów
1 odpowiedź 200 wizyt
pytanie zadane 19 kwietnia 2016 w C i C++ przez niezalogowany

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...