Tôi có một đối tượng phức tạp (đối với tôi) với khoảng 20 thành viên dữ liệu, nhiều trong số đó là con trỏ đến các lớp khác. Vì vậy, đối với hàm tạo, tôi có một danh sách khởi tạo phức tạp và dài. Lớp này cũng có một tá các hàm tạo khác nhau, phản ánh các cách khác nhau mà lớp có thể được tạo ra. Hầu hết các mục được khởi tạo này không thay đổi giữa các hàm tạo khác nhau này. Quan tâm của tôi ở đây là bây giờ tôi có một mâm lớn được sao chép (hoặc phần lớn được sao chép) mã, nếu tôi cần thêm một thành viên mới vào lớp, có thể không đưa nó vào mỗi danh sách khởi tạo của hàm dựng.Xử lý một lớp với danh sách khởi tạo dài và nhiều hàm tạo?
class Object
{
Object();
Object(const string &Name);
Object (const string &Name, const string &path);
Object (const string &Name, const bool loadMetadata);
Object (const string &Name, const string &path, const bool loadMetadata);
}
Object::Object() :
name(),
parent_index (0),
rowData (new MemoryRow()),
objectFile(),
rows (new MemoryColumn (object_constants::RowName, OBJECTID, object_constants::ROWS_OID)),
cols (new MemoryColumn (object_constants::ColName, OBJECTID, object_constants::COLS_OID)),
objectName (new MemoryColumn(object_constants::ObjName, STRING, object_constants::short_name_len, object_constants::OBJECTNAME_OID)),
parent (new MemoryColumn(object_constants::ParentName, STRING, object_constants::long_name_len, object_constants::PARENT_OID)),
parentIndex (new MemoryColumn(object_constants::ParentIndex, OBJECTID, object_constants::PARENTINDEX_OID)),
childCount (new MemoryColumn (object_constants::ChildCount, INTEGER, object_constants::CHILD_COUNT_OID)),
childList (new MemoryColumn (object_constants::ChildList, STRING, object_constants::long_name_len, object_constants::CHILD_OID)),
columnNames (new MemoryColumn (object_constants::ColumnNames, STRING, object_constats::short_name_len, object_constants::COLUMN_NAME)),
columnTypes (new MemoryColumn (object_constants::ColumnTypes, INTEGER, object_constants::COLUMN_TYPE)),
columnSizes (new MemoryColumn (object_constants::ColumnSizes, INTEGER, object_constants::COLUMN_SIZE))
{}
Sau đó lặp lại như trên cho các nhà thầu khác. Có cách nào thông minh của việc sử dụng constructor mặc định cho điều này, sau đó sửa đổi các kết quả cho các nhà xây dựng khác?
có thể muốn sử dụng quyền thừa kế riêng vì đây là chi tiết triển khai. –
hoặc đặt baseclass trong một không gian tên trống? – jiggunjer