Điểm duy nhất trong việc thực hiện trường hợp thứ hai là nếu tôi muốn lấy được từ một Collidable mà không phải là một đối tượng? Nếu đó là trường hợp, khi nào là trường hợp đầu tiên bao giờ thuận lợi kể từ khi trường hợp thứ 2 cung cấp sự linh hoạt hơn.Loại thừa kế nào thích hợp hơn?
Cả hai collidables chỉ có một chức năng ảo tinh khiết và Object là một lớp cơ sở cho các đối tượng có thể được vẽ trên màn hình (trong trường hợp của tôi).
^Giả sử tôi hiểu đoạn mã sau chính xác (Tôi không quá chắc chắn TBH)
class Object
class CollidableObject : Object
class Actor : public CollidableObject
class Object
class Collidable
class Actor : public Object, public Collidable
Edit:
Dựa trên Matt/Seth
class Object
class Collidable
class Clickable
class Trackable
class BlowUppable
class Actor : public Object, public Collidable, public Clickable, public Trackable,
public BlowUppable
class SomeObjectThatIsTakenForGrantedThatEverythingElseIsInherited : public Actor
dụ đầu tiên là trường hợp thứ hai và ví dụ thứ hai là trường hợp đầu tiên. Tôi đoán đó là sử dụng duy nhất tôi thấy cho trường hợp đầu tiên.
@Luchian
Đây sẽ là một câu hỏi khác với câu hỏi gốc từ thư trả lời của bạn.
Trong trường hợp này, có sự khác biệt nào đang thay đổi một đối tượng từ mối quan hệ-a đến mối quan hệ có-a không? Trong mỗi trường hợp, để kiểm tra va chạm, một đối tượng phải có một lá cờ để biết liệu có nên kiểm tra va chạm hay không. Trong trường hợp của bạn, các thành viên có thể được kiểm tra nếu nó null hay không, nhưng trong trường hợp có nguồn gốc, đối tượng chính nó cho biết liệu nó có thể va chạm hay không. Trong một mảng/cây, tôi có thể truyền đối tượng dẫn xuất dưới dạng đối số hoặc chuyển hitbox làm đối số bằng cách sử dụng phương thức get().
Để được nhiều hơn trong chiều sâu, tôi có một lớp khác - sử dụng trường hợp thứ hai
class Hitbox : public Object, public Collidable
và lớp diễn viên có nó như là một thành viên
class Actor : public Object
{
Hitbox *box;
};
Đối tượng có va chạm sẽ có một hitbox thay vào đó và điều này thể hiện chính xác bài đăng của bạn mà tôi nghĩ. Nhưng những gì vẫn nhận được tôi là khi tôi xem lại ví dụ của bạn một lần nữa, có nghĩa là Hitbox nên có một thành viên Collidable thay thế?
class Hitbox
{
Collidable *collision;
};
Những gì tôi có:
Một diễn viên giữ một Hitbox mà xử lý va chạm
gì Hitbox nên làm:
Kế thừa Collidable hoặc
Có Collidable như một thành viên
diễn viên đã được sau quy ước của bạn. Hitbox có nên làm như vậy không?
Bạn sẽ không phải có 'CollidableTrackableClickableBlowuppableObject' nếu bạn đã thực hiện thao tác đầu tiên; nó chỉ là một lớp được thừa kế từ 'Collidable', 'Trackable',' Clickable', và 'Blowuppable', giống như cách đầu tiên, nhưng bạn sẽ không kế thừa' Object' như cái đầu tiên. Tôi không chắc liệu người đầu tiên có hữu ích hơn hay không; không phải tất cả 'Clickable' có thể vẽ được trên màn hình không? Nếu bạn có tất cả chúng là riêng biệt, bạn không thể biết liệu 'Object' của bạn có thể nhấp được hay không nếu bạn có thể click' Clickable'. Với cách thứ hai, bạn biết rằng 'Có thể nhấp' có thể vẽ được. –
Bạn sẽ không phải có ... nếu bạn đã làm _second_ tôi muốn nói. –