Hey.
Mam problem teoretyczny, wynikający trochę z braków w wiedzy ale nie bardzo wiem jak zadać to pytanie w wyszukiwarce (o ile taki mechanizm o którym za chwilę napiszę istnieje). A więc do rzeczy.
Mam klasę Obiekt. Jest prosta bo nie ma ciała, jest tylko po to by po niej dziedziczyć
class Obiekt { };
I mam teraz masę innych klas: Dom, Mur, Płot itd. Wszystkie one dziedzą z klasy Obiekt
class Dom : public Obiekt
{
short int id;
std::string type;
Dom(short int id, std::string type) {
this->id = id;
this->type = type;
}
};
class Płot : public Obiekt
{
short int id;
std::string type;
Płot(short int id, std::string type) {
this->id = id;
this->type = type;
}
};
class Mur : public Obiekt
{
short int id;
std::string type;
Mur(short int id, std::string type) {
this->id = id;
this->type = type;
}
};
Wszystkie nazwy tych klas mają ze sobą coś wspólnego. Wszystkie te obiekty w realnym życiu mogą być budowane. Teraz mam nadzieję wiecie co chciałem osiągnąć. Mając kolejkę budowania mogę ją zdefiniować np jako wektor
Vector<Obiekt> kolejka
i wszyskie te obiekty (dom, mur i płot) będzie można dodać do tej kolejki. To się bodajże nazywa polimorfizm.
Moje pytanie jest następujące: Mając setki obiektów, które mogę budować mam setki implementacji tych konstruktorów, które jak widać są praktycznie takie same. Wszystkie te klasy są takie same, różnią się jedynie nazwami oraz wartościami pól "id" oraz "type". Chciałbym osiągnąc taki efekt, że raz definiuję konstruktor (np. w klasie Obiekt) i pisząc coś w stylu
Obiekt dom = new Dom(1, "blabla");
w klasie Dom mam wartości pól id=1 i type="blabla". Da się takie coś osiągnąć?