【发布时间】:2009-04-30 22:05:46
【问题描述】:
现在我正在使用 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 继承是一个禁忌。
【问题讨论】:
-
仅供参考——从 STL 继承的原因是禁忌,因为它没有虚拟析构函数。因此,如果您通过指向 STL 基类型的指针删除了自己的类,则不会调用您的析构函数。
-
我说过我不会在问题中那样做。
-
没想到你会;只是认为提供原因会有所帮助。
标签: c++ inheritance operator-overloading