Untitled

 avatar
unknown
plain_text
a year ago
2.0 kB
4
Indexable
#include <iostream>
#include <string>
using namespace std;

class Zrno {
public:
    string boja;
    float promjer;
};

class Pijesak {
public:
    int kolicina;
    Zrno* zrno;

    // Konstruktor
    Pijesak(int _kolicina) : kolicina(_kolicina) {
        zrno = new Zrno[kolicina]; // dinamički alocirajte polje 'zrno'
    }

    // Konstruktor kopije
    Pijesak(const Pijesak& other) : kolicina(other.kolicina) {
        zrno = new Zrno[kolicina];
        for (int i = 0; i < kolicina; ++i) {
            zrno[i] = other.zrno[i];
        }
    }

    // Operator pridruživanja s semantikom kopiranja
    Pijesak& operator=(const Pijesak& other) {
        if (this != &other) {
            delete[] zrno; // Oslobodi staro zrno prije kopiranja
            kolicina = other.kolicina;
            zrno = new Zrno[kolicina];
            for (int i = 0; i < kolicina; ++i) {
                zrno[i] = other.zrno[i];
            }
        }
        return *this;
    }

    // Operator pridruživanja s semantikom prijenosa (move)
    Pijesak& operator=(Pijesak&& other) noexcept {
        if (this != &other) {
            delete[] zrno; // Oslobodi staro zrno prije premještanja
            kolicina = other.kolicina;
            zrno = other.zrno;
            other.kolicina = 0;
            other.zrno = nullptr;
        }
        return *this;
    }

    // Destruktor
    ~Pijesak() {
        delete[] zrno; // Oslobodi dinamički alocirano polje zrna
    }
};

int main() {
    Pijesak igraliste(1000000);
    cout << "Na igralistu ima " << igraliste.kolicina << " zrna pijeska!\n";

    // Demonstracija konstruktora kopije
    Pijesak kopija(igraliste);

    // Demonstracija operatora pridruživanja s kopiranjem
    Pijesak kopija2 = igraliste;

    // Demonstracija operatora pridruživanja s prijenosom (move)
    Pijesak novi = std::move(igraliste);

    return 0;
}
Editor is loading...
Leave a Comment