De ce te complici atât când lucrurile pot fi simple? Tu practic ai nevoie de „variabile dinamice” pe care s? le po?i copia într-o nou? „categorie” atunci când ai nevoie de ele. Lucrurile astea pot fi rezolvate foarte simplu cu ajutorul map-urilor, unde ai key/value, key-ul reprezentând noua „variabil?” (pe care o po?i denumi dup? bunul plac), iar value, valoarea efectiv? a respectivei „variabile”. Mo?tenirea poate fi „simulat?” prin copierea acelor key care te intereseaz?. Î?i scriu un exemplu de clas? care poate fi folosit? pentru toate „categoriile”: #include <iostream> #include <string> #include <map> #include <vector> using namespace std; class Categorie { public: Categorie(string tip) { this->tip = tip; } Categorie(string tip, Categorie parinte, vector<string> proprietati) { this->tip = tip; vector<string> proprietati_parinte = parinte.ProprietatileMele(); for (unsigned int i = 0; i < proprietati_parinte.size(); i++) this->AdaugaProprietate(proprietati_parinte, ""); for (unsigned int i = 0; i < proprietati.size(); i++) this->AdaugaProprietate(proprietati, parinte.CitesteProprietate(proprietati)); } void AdaugaProprietate(string nume, string valoare) { this->proprietati[nume] = valoare; } string CitesteProprietate(string nume) { return this->proprietati[nume]; } vector<string> ProprietatileMele() { vector<string> proprietati; for (map<string, string>::iterator i = this->proprietati.begin(); i != this->proprietati.end(); i++) proprietati.push_back(i->first); return proprietati; } private: string tip; map<string, string> proprietati; }; Iar folosirea ar putea fi cam a?a: int main() { Categorie *iepure = new Categorie("iepure"); iepure->AdaugaProprietate("culoare", "alb"); iepure->AdaugaProprietate("mers", "topait"); iepure->AdaugaProprietate("dinti", "alungiti"); Categorie *caine = new Categorie("caine", *iepure, { "culoare" }); caine->AdaugaProprietate("mers", "normal"); cout << iepure->CitesteProprietate("culoare") << endl; cout << iepure->CitesteProprietate("mers") << endl; cout << iepure->CitesteProprietate("dinti") << endl; cout << caine->CitesteProprietate("culoare") << endl; cout << caine->CitesteProprietate("mers") << endl; cout << caine->CitesteProprietate("dinti") << endl; system("PAUSE"); return 0; } Toate cele bune.