Прямо сейчас я использую std :: pair для представления 2d точки в C++. Тем не менее, я получаю раздражен, чтобы писатьСоздание класса Point в C++
typedef std::pair<double, double> Point;
Point difference = Point(p2.first - p1.first,
p2.second - p1.second);
вместо того, чтобы быть в состоянии перегрузки оператора + и operator-.
Итак, мой вопрос, чтобы сделать свой класс Point, я должен
- Публично вытекают из станд :: пары и добавить свои собственные функции-члены? Это хорошо, потому что весь мой код может оставаться неизменным. Я не собираюсь ничего делать, как
std::pair<double, double>* p = new Point;
, поэтому мне не нужно беспокоиться о таких вещах, как виртуальные деструкторы. - Сверните мой собственный класс Point, который раздражает, так как я дублирую функциональность std :: pair, однако я «делаю это чистым способом».
- Создайте специализированные шаблоны оператора + и operator- для std :: pair, которые, по общему признанию, я не помню, идут ли они в исходные или заголовочные файлы.
Я предполагаю, что это дебаты, я бы очень хотел сделать # 1, но я не знаю, плохо ли это, так как я слышал, что наследование от STL - это не-нет.
FYI - причина, наследующая от STL, - это не-нет, это отсутствие виртуального деструктора. Итак, если вы удалили свой собственный класс с помощью указателя на базовый тип STL, ваш деструктор не будет вызван. – JohnMcG
Я сказал, что не буду этого делать в вопросе. – rlbond
Не думал, что вы это сделаете; просто подумал, что было бы полезно указать причину. – JohnMcG