Per essere onesti, non so davvero, come porre questa domanda, quindi per favore non essere arrabbiato :)C++ funzione nel genitore bambino cambio
In ogni caso, voglio avere le mutatori (setter) nella mia classe per restituire this
per consentire jQuery-like a.name("something").address("somethingelse");
Ho una classe padre (Entity
) e diversi childclasses (Client, Agent etc.
). I mutatori per la maggior parte delle cose sono ereditati dalla classe Entity
(come nome o indirizzo), ma restituiscono un oggetto Entity
, quindi non posso richiamare i mutatori client su di essi.
In altre parole:
// 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;
}
poi quando lo chiamo io:
Client a; a.name("Dorota Adamczyk").budgetRange(50);
Il compilatore (logicamente) dice che l'oggetto entità ha nessun membro budgetRange (perché il nome restituisce un Entity, non un cliente).
La mia domanda ora è: come potrei implementare qualcosa di simile? Ho pensato a un sovraccarico di tutte le funzioni entità nel childclasses, ma che non sarebbe bello e sarebbe contro l'idea di eredità :)
Grazie in anticipo per le vostre idee: D
google anche per 'metodo concatenamento' e' named parametro idiom', che è quello che stai facendo.Si noti che, quando si eredita da 'Client' il codice si interromperà di nuovo usando la soluzione CRTP di seguito. – cheind