Честно говоря, я не знаю, как задать этот вопрос, так что, пожалуйста, не сердитесь :)
В общем, я хочу, чтобы мутаторы (сеттеры) в моем классе возвращали 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