[C++] наследование vs агрегация
От: Abyx Россия  
Дата: 12.05.11 22:40
Оценка:
есть какая-то задача, например слежение за воронами
надо
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); }
};


прав я или не прав?
In Zen We Trust
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.