Hãy một thư viện chứa các hệ thống phân cấp lớp sau đây:C++ - Đặt các thành viên chung cho hai lớp tiểu
class LuaChunk
{
};
class LuaExpr : public LuaChunk
{
};
class LuaScript : public LuaChunk
{
};
Bây giờ tôi muốn sử dụng thư viện này trong ứng dụng của tôi bằng cách mở rộng hai loại cổ phiếu này:
class AppLuaExpr : public LuaExpr
{
private:
Foo * someAppSpecificMemberFoo;
Bar * someAppSpecificMemberBar;
};
class AppLuaScript : public LuaScript
{
private:
Foo * someAppSpecificMemberFoo;
Bar * someAppSpecificMemberBar;
};
Vấn đề ở đây là, nếu tôi có nhiều thành viên, mỗi người trong số họ có cặp getter/setter riêng, nó sẽ tạo ra rất nhiều sự sao chép mã.
Có cách nào, không sử dụng nhiều thừa kế (mà tôi muốn tránh) để đặt chung các công cụ dành riêng cho ứng dụng có trong cả hai AppLuaExpr
và AppLuaExpr
?
Tôi đã xem xét các mẫu thiết kế cấu trúc hiện có được liệt kê trên Wikipedia, nhưng dường như không có mẫu nào được điều chỉnh phù hợp với vấn đề của tôi.
Cảm ơn bạn.
Cách sử dụng * composition *? Tạo một lớp học với các thành viên và mã phổ biến của bạn, và thêm nó như là một thành viên của các lớp cụ thể của bạn? – Louen
@Louen Cảm ơn sự giúp đỡ của bạn. Có vẻ như đó là một lựa chọn. Bạn có ý tưởng nào khác không? – Virus721
@songyuanyao Không, tôi không thể làm điều đó. Như tôi đã đề cập, 3 lớp đầu tiên được mô tả ở trên nằm trong thư viện mà tôi không thể thêm nội dung cụ thể cho ứng dụng vào, nếu không nó không còn là thư viện nữa. – Virus721