c++ - 在 C++ 中创建一个 Point 类

标签 c++ inheritance operator-overloading

现在我正在使用 std::pair 来表示 C++ 中的二维点。但是,我对不得不写感到恼火

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

Point difference = Point(p2.first - p1.first,
                         p2.second - p1.second);

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

所以,我的问题是,我应该上 Point 课吗

  • 公开派生自 std::pair 并添加我自己的成员函数?这很好,因为我的所有代码都可以保持不变。我不会做类似 std::pair<double, double>* p = new Point; 的事情所以我不必担心虚拟析构函数之类的事情。
  • 滚动我自己的 Point 类,这很烦人,因为我正在复制 std::pair 的功能,但我是“以纯粹的方式”。
  • 为 std::pair 制作 operator+ 和 operator- 的模板特化,诚然,我不记得它们是在源文件还是头文件中。

我想这有待商榷,我真的很想做#1,但我不知道这是否是个坏主意,因为我听说从 STL 继承是不行的。

最佳答案

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

关于c++ - 在 C++ 中创建一个 Point 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/809334/

相关文章:

c++ - 表达式中运算符的 GCC 和 ADL

c++ - 重载运算符的返回类型 + 表现出奇怪的行为

c++ - C++中后缀自增运算符中int变量的含义

c++ - 引用 "auto"函数作为模板参数

c++ - 具有重载名称的模板化方法

c++ - 类在同一内存位置创建另一个类的多个对象 (C++)

c++ - 将基类 vector 传递给采用父类(super class) vector 的函数

c++ - 访问使用 def 文件导出的静态变量时崩溃

c# - 从具有参数的 'Form' 继承

基于 C++ 策略的设计 : Inheritance vs composition