【发布时间】:2019-11-02 14:16:27
【问题描述】:
当从类模板(例如pair)派生类时,我们似乎需要包含iostream:
此代码有效:
#include <iostream>
class Vector: public std::pair<double,double> {
public:
Vector() {}
Vector(double a, double b): std::pair<double,double> (a,b) {}
};
int main
{
return 0;
}
但如果我们省略 #include <iostream> 它甚至不会编译:
5 error: expected template-name before '<' token
这种继承需要iostream的什么特性?
【问题讨论】:
-
我希望你包含 tuple 或 util 来获取 std::pair
-
std::pair在utility标头中。我猜iostream也包括utility。 -
顺便说一句,不确定pair是否有虚拟析构函数,这种继承可能会给你带来麻烦
-
您通常应该避免从这样的类中公开派生,而是使用组合。例如,该代码会通过允许外部代码修改
pair数据成员(对实现的不希望的公共访问)来破坏封装。
标签: c++ class inheritance iostream