C++ function in parent return child

Честно говоря, я не знаю, как задать этот вопрос, так что, пожалуйста, не сердитесь :)

В общем, я хочу, чтобы мутаторы (сеттеры) в моем классе возвращали this для возможности jQuery-like a.name("something").address("somethingelse");. У меня есть родительский класс (Entity) и несколько дочерних классов (Client, Agent и т.д.). Мутаторы для большинства вещей наследуются от класса Entity (например, имя или адрес), но они возвращают объект Entity, поэтому я не могу вызвать для них мутаторы Client.

Другими словами:

// name mutator
Entity& Entity::name( const string& name ) {
    // [...] checks
    _name = name;
    return *this;
}

// budgetRange mutator
Client& Client::budgetRange( const long int& range ) {
    // [...] checks
    _budgetRange = range;
    return *this;   
}

когда я вызываю:

Client a; a.name("Dorota Adamczyk").budgetRange(50);

компилятор (логически) говорит, что объект Entity не имеет члена budgetRange (потому что name возвращает Entity, а не Client).

Теперь у меня вопрос: как я могу реализовать нечто подобное? Я думал перегрузить все функции Entity в дочерних классах, но это было бы некрасиво и противоречило бы идее наследования :)

Заранее спасибо за ваши идеи :D

5
задан Asmodiel 20 December 2011 в 13:08
поделиться