在c ++中创建Point类

rlb*_*ond 6 c++ inheritance operator-overloading

现在我使用std :: pair来表示c ++中的2d点.但是,我对写作感到恼火

typedef std::pair<double, double> Point;

Point difference = Point(p2.first - p1.first,
                         p2.second - p1.second);
Run Code Online (Sandbox Code Playgroud)

而不是能够重载operator +和operator-.

所以,我的问题是,要使我的Point课程,我应该

  • 公开派生自std :: pair并添加我自己的成员函数?这很好,因为我的所有代码都可以保持不变.我不打算做任何事情,std::pair<double, double>* p = new Point;所以我不必担心虚拟析构函数等问题.
  • 滚动我自己的Point类,这很烦人,因为我复制了std :: pair的功能,但是我"以纯粹的方式做".
  • 为std :: pair制作operator +和operator-的模板特化,不可否认,我不记得它们是否包含源文件或头文件.

我想这是辩论,我真的很想做#1,但我不知道这是不是一个坏主意,因为我听说从STL继承是一个禁忌.

Soo*_*Tan 14

您可以滚动自己的Point类,但在内部使用std :: pair来存储数据.这可以防止继承STL问题,但仍然使用std :: pair的功能.