Witam, otóż mój wykładowca zażyczył sobie, abyśmy w projekcie użyli jak najwięcej wzorców projektowych. I wcześniej miałem tak:
class Produkt{
public:
string nazwa;
int ilosc;
Produkt(string nazwa, int ilosc);
};
Produkt::Produkt(string nazwa, int ilosc)
{
this->nazwa = nazwa;
this->ilosc= ilosc;
};
class Konkretny_produkt{
public:
float nowa_ilosc;
string nazwa;
int ilosc;
Konkretny_produkt(float nowa_ilosc, Produkt lol);
};
Konkretny_produkt::Konkretny_produkt(float nowa_ilosc, Produkt lol)
{
this->nazwa = lol.nazwa;
this->nowa_ilosc = nowa_ilosc;
this->ilosc= lol.miara;
};
I produkt robię w taki sposób:
Produkt maka("maka", 1000);
Konkretny_produkt konkretnamaka(250, maka);
Czy można to zastąpić jakimś wzorcem projektowym? Albo czy jest jakiś wzorzec, który zrobi mi identyczny obiekt jak "Produkt maka"? I jeżeli tak, to jaki. Ponieważ próbowałem "prototyp", ale w tym wzorcu nowy obiekt tworzy się tak:
IPrototype * pObiekt1 = new CMyPrototype1("maka", 1000);
IPrototype * pObiekt2 = pObiekt1->Klonuj();
I np nie można zrobić czegoś takiego:
cout << pObiekt2.nazwa << endl;
A chciałbym, abym mógł tak robić, bo potrzebuję to w innej części kodu.
Chyba, że można jakoś może przerobić ten wzorzec prototyp? Tylko jak? Obecnie to tak wygląda:
// ConsoleApplication12.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <cstdio>
#include <cstring>
#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <list>
#include <algorithm>
#include <initializer_list>
#include <vector>
#include <iterator>
using namespace std;
int proba = 0;
int g = 0;
int zmiennadokonstruktora = 0;
string tablicadokonstruktora[40];
float zmienna[10];
int zmienna2[10], zmienna5[10];
string zmienna3[10], zmienna4[10];
class IPrototype
{
public:
virtual IPrototype * Klonuj() const = 0;
virtual void Wypisz() const = 0;
virtual ~IPrototype() { }
};
class CMyPrototype1
: public IPrototype
{
private:
float cena;
string nazwa;
int miara;
string jednostka;
string produkt;
int nowa_miara;
public:
CMyPrototype1(string nazwa, float cena, int miara, string jednostka, int nowa_miara)
{
tablicadokonstruktora[zmiennadokonstruktora] = nazwa;
zmiennadokonstruktora = zmiennadokonstruktora + 1;
cout << nazwa << cena << endl;
this->nazwa = nazwa;
this->cena = cena;
this->miara = miara;
this->jednostka = jednostka;
this->nowa_miara = nowa_miara;
cout << nazwa << cena << endl;
}
CMyPrototype1(const CMyPrototype1 & kopia)
{
this->nazwa = kopia.nazwa;
this->cena = kopia.cena;
this->miara = kopia.miara;
this->jednostka = kopia.jednostka;
this->nowa_miara = kopia.nowa_miara;
cout << nazwa << cena << endl;
}
virtual IPrototype * Klonuj() const
{
//INFO: Przykładowa implementacja klonowania
return new CMyPrototype1(*this);
}
virtual void Wypisz() const
{
printf("Liczba = %d\n", cena);
printf("Komunikat = \"%s\"\n", nazwa);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
IPrototype * pObiekt1 = new CMyPrototype1("maka", 1.99, 1000, "gram", 1000);
IPrototype * pObiekt2 = pObiekt1->Klonuj();
delete pObiekt1;
pObiekt2->Wypisz();
delete pObiekt2;
return 0;
}