cuốn sách gpt4 ai đã làm

Làm cách nào để ngăn chặn việc gán với toán tử kế thừa []?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 14:40:51 27 4
mua khóa gpt4 Nike

我有一个名为 SortedArrayList Một cấu trúc tùy chỉnh sắp xếp các phần tử của nó dựa trên bộ so sánh, tôi muốn ngăn việc sử dụng toán tử [] Thực hiện phân bổ.

Ví dụ:

danh sách mảng.h

mẫu  lớp ArrayList : Danh sách công khai {
ảo T& operator[](const int& index) ghi đè; //ghi đè Danh sách
toán tử const T ảo[](const int& index) const ghi đè; //ghi đè Danh sách
}

SortedLinkedList.h với các toán tử sau

mẫu  lớp SortedArrayList : public ArrayList {
public:

SortedArrayList(const std::function& bộ so sánh);

Ghi đè T& operator[](const int& index); //lấy tham chiếu (LHS)
const T operator[](const int& index) const ghi đè; //lấy bản sao (RHS)
}

kiểm tra.h

ArrayList* Regular = new ArrayList();
ArrayList* được sắp xếp = new SortedArrayList(cmpfn);

(*thông thường)[0] == 5; //cho phép
(*thông thường)[0] = 5; //cho phép
(*đã sắp xếp)[0] == 7; //cho phép
(*đã sắp xếp)[0] = 7; // ngoại trừ

Hoạt động này có khả thi không?

Bằng cách chặn, tôi muốn nói đến điều gì đó ném ra một ngoại lệ hoặc cảnh báo người dùng không làm điều đó.

câu trả lời hay nhất

Thích nó hơn là thừa kếsự trùng hợp:

mẫu  lớp SortedArrayList {
ArrayList m_the_list;
public:

SortedArrayList(const std::function& bộ so sánh);

const T& operator[](const int& index) const {return m_the_list[index];} // luôn lấy tham chiếu const

// Có thể hoạt động như một *const* ArrayList, nhưng không hoạt động như một ArrayList có thể thay đổi, vì điều đó sẽ vi phạm nguyên tắc thay thế của Liskov.
toán tử const ArrayList&() const {return m_the_list;}
}

作为Stephen NewellChính xácchỉ ra , khi bạn sử dụng tính kế thừa, bạn đảm bảo rằng lớp của bạn Danh sách mảng được sắp xếp có thể hoạt động như một ArrayList. Đây rõ ràng không phải là trường hợp trong ví dụ của bạn.

Bạn có thể đọc thêmđâySuy nghĩ về việc vi phạm Nguyên tắc thay thế của Liskov sẽ tệ đến mức nào.

Làm cách nào để ngăn chặn việc gán với toán tử kế thừa []? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/50048932/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress