Ahora estoy usando std :: pair para representar un punto 2d en C++. Sin embargo, estoy consiguiendo molesto con tener que escribirHaciendo una clase de punto en C++
typedef std::pair<double, double> Point;
Point difference = Point(p2.first - p1.first,
p2.second - p1.second);
en lugar de ser capaz de sobrecargar el operador + y del operador.
Por lo tanto, mi pregunta es, hacer que mi clase Point, debería
- públicamente derivar de std :: pair y añadir mis propias funciones miembro? Esto es bueno porque todo mi código puede permanecer igual. No voy a hacer nada como
std::pair<double, double>* p = new Point;
, así que no tengo que preocuparme por cosas como los destructores virtuales. - Tira mi propia clase de punto, que es molesto ya que estoy duplicando la funcionalidad de std :: pair, sin embargo, estoy "haciéndolo de la manera pura".
- Realice especializaciones de plantilla de operator + y operator- for std :: pair, que sin duda no recuerdo si van en archivos de fuente o de encabezado.
Supongo que es un tema de debate, me gustaría hacer # 1, pero no sé si es una mala idea ya que he oído que heredar de STL es un no-no.
FYI - la razón por la que heredar de la STL es un no-no es que no tiene un destructor virtual. Entonces, si eliminaste tu propia clase mediante un puntero al tipo de base STL, no se invocaría tu destructor. – JohnMcG
Dije que no haría eso en la pregunta. – rlbond
No pensé que lo haría; solo pensé que sería útil dar la razón por la cual. – JohnMcG