Thành thật mà nói, tôi không thực sự biết, làm thế nào để hỏi câu hỏi này, vì vậy hãy đừng giận :)C++ hàm trong cha mẹ trở lại con
Dù sao, tôi muốn có mutators (setters) trong lớp học của tôi để trả lại this
để cho phép jQuery giống như a.name("something").address("somethingelse");
Tôi có một lớp cha mẹ (Entity
) và một số lớp con (Client, Agent etc.
). Các mutator cho hầu hết mọi thứ được thừa hưởng từ lớp Entity
(như tên hoặc địa chỉ), nhưng chúng trả về một đối tượng Entity
, vì vậy tôi không thể gọi trình biến đổi khách hàng trên chúng.
Nói cách khác:
// 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;
}
sau đó khi tôi gọi nó là:
Client a; a.name("Dorota Adamczyk").budgetRange(50);
Trình biên dịch (logic) cho biết, rằng đối tượng Entity không có thành viên budgetRange (vì tên trả về một thực thể, không phải là Khách hàng).
Câu hỏi của tôi bây giờ là: làm cách nào tôi có thể triển khai một cái gì đó như thế này? Tôi nghĩ về quá tải tất cả các chức năng Entity trong childclasses nhưng điều đó sẽ không được tốt đẹp và sẽ chống lại ý tưởng của thừa kế :)
Cảm ơn bạn trước cho ý tưởng của bạn: D
google cũng cho 'phương thức chaining' và' tên tham số idiom', đó là những gì bạn đang làm.Lưu ý rằng, khi kế thừa từ 'Client', mã của bạn sẽ lại phá vỡ bằng cách sử dụng giải pháp CRTP bên dưới. – cheind