Если честно, я не знаю, как задать этот вопрос, поэтому, пожалуйста, не злись:)
В любом случае, я хочу, чтобы в моем классе были мутаторы (сеттеры), чтобывернуть this
, чтобы учесть jQuery-подобный a.name("something").address("somethingelse");
У меня есть родительский класс (Entity
) и несколько дочерних классов (Client, Agent etc.
).Мутаторы для большинства вещей наследуются от класса Entity
(например, имя или адрес), но они возвращают объект Entity
, поэтому я не могу вызывать клиентские мутаторы для них.
Другими словами:
// 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