#include <iostream> using namespace std; class Room { private: // association unsigned int nSubRooms; Room *subRooms; public: Room() : nSubRooms(0), subRooms(0) { } unsigned int getNbSubRooms() const { return nSubRooms; } Room *getSubRoom(unsigned int i) const { if (i<nSubRooms) return subRooms+i; return 0; } void addSubRooms(unsigned int n) { nSubRooms = n; subRooms = new Room[n]; } ~Room() { if (nSubRooms) delete [] subRooms; } }; class Building { private: const int nRooms; Room *const rooms; public: Building(unsigned int n) : nRooms(n), rooms(new Room[nRooms]) { } Room *getRoom(unsigned int i) const { if (i<nRooms) return rooms+i; return 0; } unsigned int getNbRooms() const { return nRooms; } ~Building() { if (nRooms) delete [] rooms; } }; int main() { Building b(10); b.getRoom(1)->addSubRooms(2); cout << b.getNbRooms() << endl; for (int i=0; i<b.getNbRooms(); i++) { cout << b.getRoom(i)->getNbSubRooms() << endl; } return 0; }