Skocz do zawartości

Jak napisać operator przypisania i konstruktor kopiujący dla obiektu dynamicznego?


Recommended Posts

Cześć :) Mam prosbe czy mozecie mi pomoc w napisaniu programu, mam tu zastosowac konstruktor kopiujacy do obiektu dynamicznego, operator przypisania ( wykladowca mowil ze to sie robi w metodzie) oraz przeciazyc operator <<. Pozniej mam to przetestowac czy dobrze dziala prosze o pomoc ponizej wkleilam caly kod. :)

#include <iostream>
#include <cstring>
using namespace std;
class Procesor {
private:
string marka;
int czestotliwosc;

public:
Procesor()
: marka("Radeon")
, czestotliwosc(1000)
{
#ifdef TESTPR
cout << "Dziala konstruktor domyslny Procesor()" << endl;
#endif
}

~Procesor()
{
#ifdef TESTPR
cout << "Dziala destruktor ~Procesor()" << endl;
#endif
}
void infoprocesor()
{
cout << "marka procesora " << marka << endl;
cout << " czestotliwosc procesora : " << czestotliwosc << endl;
}
};

#include <iostream>
//#include "Karta.h"
using namespace std;
class Karta {
private:
string nazwa;
int pamiec;

public:
Karta()
: nazwa("Nvidia")
, pamiec(2000)
{
//cout << "Karta "  << endl;
#ifdef TESTPR
cout << "Dziala konstruktor dynamiczny Karta()" << endl;
#endif
}
~Karta()
{
#ifdef TESTPR
cout << "Dziala destruktor ~Karta()" << endl;
#endif
}
void wyswietlinfo()
{
cout << "nazwa karty" << nazwa << endl;
cout << " pamiec karty" << pamiec << endl;
}
};

#include <iostream>
#include <cstdio>
#include <cstring>
#include "procesor.cpp"
#include "Karta.cpp"
using namespace std;
typedef int TypDanychT;
class Komputer {
private:
string wykonawca;
string producent;
Procesor procesor;
static int licznik;
int dysk;
Karta* karta;
int ram;

public:
friend ostream& operator<<(ostream&, Komputer const&);
Komputer(int x, int y)
{
this->x = x;
this->y = y;
}
static int zwrocLicznik() { return licznik; }
int x, y;
Komputer()
{
karta = NULL;

//cout << "konstruktor" << endl;
x = 3;
y = 5;
dysk = 500;
ram = 2000;
++licznik;
#ifdef TESTPR
cout << "Dziala konstruktor domyslny Komputer()" << endl;
#endif
}

void dodajkarta()
{
if (karta == NULL)
karta = new Karta();
cout << "dodana karta" << endl;
}

void usunkarta()
{
if (karta)
delete karta;
cout << "usunieto karta" << endl;
}

void infokomp()
{
cout << "dysk ma pojemnosc  " << dysk << endl;
cout << "pamiec ram wynosci " << ram << endl;
if (karta)
karta->wyswietlinfo();
procesor.infoprocesor();
}

Komputer(const Komputer& o)
{
#ifdef TESTPR
cout << "Dziala konstruktor kopiujacy Komputer()" << endl;
#endif

producent = o.producent;
wykonawca = o.wykonawca;
procesor = o.procesor;
dysk = o.dysk;
//if (o.karta != NULL)
//karta = new Karta(*o.karta);
cout << "konstruktor kopiujacy sie wywolal " << endl;
cout << "pojemnosc dysku komputera wynosi " << dysk << endl;
}

~Komputer()
{
--licznik;
#ifdef TESTPR
cout << "Dziala desturktor ~Komputer()" << endl;
#endif
}

bool operator==(const Komputer& k) { return producent == k.producent; }

void setProducent(string producent) { this->producent = producent; }

Komputer& operator=(const Komputer& p)
{
cout << "operator przypisania" << endl;
dysk = p.dysk;
ram = p.ram;
<em>/* if (p.karta != NULL)
{
if (karta == NULL) karta = new Karta;
*karta = *p.karta;
}*/</em>
return *this;
}

Komputer operator+(Komputer& m)
{
cout << "operator + " << endl;
Komputer temp;
temp.x = x + m.x;
temp.y = y + m.y;
return temp;
}
//        void przypisania::operator = (przypisania &b)

//ostream& operator<< (ostream &wyjscie, Komputer const& ex)
// {
//    wyjscie << "Pierwsza liczba: " << ex.pierwsza << " oraz druga: " << ex.druga << endl;
//return wyjscie;
// }
};

#include "komputer.cpp"

using namespace std;

int Komputer::licznik = 0;

int main()
{
//Karta *karta;
//karta = new Karta();

cout << "Jest " << Komputer::zwrocLicznik() << " komputerow" << endl;
Komputer k1;
cout << "Jest " << Komputer::zwrocLicznik() << " komputer" << endl;
Komputer k2;
cout << "Sa " << Komputer::zwrocLicznik() << " komputery" << endl;
Komputer* k3;
cout << "Jestesmy po deklaracjach/definicjach" << endl;
k3 = new Komputer();
cout << "Sa " << Komputer::zwrocLicznik() << " komputery" << endl;
cout << (k1 == k2) << endl;
cout << "procesory sa takie same wiec zwrocilo 1" << endl;
k2.setProducent("Intel");
cout << (k1.operator==(k2)) << endl;
cout << "procesory nie sa takie same wiec zwrocilo 0" << endl;
cout << "Jest " << Komputer::zwrocLicznik() << " komputerow" << endl;
delete k3;
cout << "Jest " << Komputer::zwrocLicznik() << " komputerow bo usunelam jeden hah" << endl;
Komputer k5;
cout << "Jest " << Komputer::zwrocLicznik() << " komputerow" << endl;

Komputer k6(k5); // konstruktor kopiujacy
Komputer k7;
Komputer k8;
k7 = k8;
k7 = k2 + k1;
k2.dodajkarta();
k2.usunkarta();
k1.infokomp();

return 0;
}
Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...