есть какая-то задача, например слежение за воронами
надо
1) вести учет ворон,
2) считать суммарное число перьев у ворон одного типа
для этой задачи написан класс который делегирует работу двум другим классам, решающем соответствующие подзадачи
class PlumesCounter
{
public:
uint getCount(uint corvusType);
void changeCount(uint corvusType, int delta);
void setCount(uint corvusType, uint value);
void reset();
bool wasUpdated();
};
class RegistryImpl
{
public:
RegistryImpl(Counter&);
void update(uint corvusId, uint corvusType, uint plumeCount);
void remove(uint corvusId);
void reset();
uint tryGetType(uint corvusId);
uint findAnyOfType(uint corvusType);
};
class CorvusRegistry
{
public:
CorvusRegistry() : counter(), regImpl(counter) {}
uint getCount(uint corvusType) { return counter.getCount(corvusType); }
void changeCount(uint corvusType, int delta) { counter.changeCount(corvusType, delta); }
void setCount(uint corvusType, uint value); // ... тоже делегирование
void reset();
bool wasUpdated();
void update(uint corvusId, uint corvusType, uint plumeCount) { regImpl.update(corvusId, corvusType, plumeCount); }
void remove(uint corvusId);
void reset();
uint tryGetType(uint corvusId);
uint findAnyOfType(uint corvusType);
private:
PlumesCounter counter;
RegistryImpl regImpl;
};
я смотрю на это и вижу кучу строк кода от которых можно избавиться.
я хочу заменить агрегацию наследованием чтоб выкинуть "ненужные" строчки кода
struct CorvusRegistry : PlumesCounter, RegistryImpl
{
CorvusRegistry() { regImpl.setCounter(*this); }
};
прав я или не прав?