Ngay bây giờ tôi đang sử dụng std :: pair để biểu diễn một điểm 2d trong C++. Tuy nhiên, tôi cảm thấy khó chịu khi phải viếtTạo một lớp Point trong C++
typedef std::pair<double, double> Point;
Point difference = Point(p2.first - p1.first,
p2.second - p1.second);
thay vì có thể quá tải toán tử + và toán tử-.
Vì vậy, câu hỏi của tôi là, để làm cho lớp Point của tôi, nên tôi
- công khai xuất phát từ std :: cặp và thêm chức năng thành viên của riêng tôi? Điều này là tốt đẹp bởi vì tất cả các mã của tôi có thể giữ nguyên. Tôi sẽ không làm bất cứ điều gì như
std::pair<double, double>* p = new Point;
vì vậy tôi không phải lo lắng về những thứ như destructors ảo. - Cuộn lớp Point của riêng tôi, điều này gây phiền toái vì tôi đang sao chép std :: chức năng của cặp, tuy nhiên tôi đang "làm theo cách thuần túy".
- Tạo các chuyên môn mẫu của toán tử + và toán tử - cho cặp :: std, mà tôi thừa nhận rằng tôi không nhớ chúng có nằm trong tệp nguồn hay tiêu đề hay không.
Tôi đoán nó đang tranh luận, tôi thực sự thích làm # 1 nhưng tôi không biết nếu đó là một ý tưởng tồi vì tôi đã nghe nói rằng kế thừa từ STL là một không-không.
FYI - lý do kế thừa từ STL là không có không là nó không có trình phá hủy ảo. Vì vậy, nếu bạn đã xóa lớp của riêng bạn thông qua một con trỏ tới kiểu cơ sở STL, thì hàm hủy của bạn sẽ không được gọi. – JohnMcG
Tôi đã nói tôi sẽ không làm điều đó trong câu hỏi. – rlbond
Không nghĩ rằng bạn sẽ; chỉ nghĩ rằng nó sẽ hữu ích để cung cấp lý do tại sao. – JohnMcG