子类隐藏父类的构造函数

时间:2012-08-20 11:25:26

标签: c++ inheritance

我有一个继承课程C

的课程P
template <typename T>
class P{
  public:
  P();
  P(T* sometype);
};

class C: public P<sometype>{

};

现在C会隐藏P(sometype*)构造函数吗?但我需要在P(ometype*)中使用C构造函数。我是否需要编写另一个调用父构造函数的C(sometype*)?或者有一些轻松的突破。我不想使用C++11功能。

4 个答案:

答案 0 :(得分:3)

是的,构造函数不是继承的。您需要为C编写一个新的:

template <typename T>
class C : public P<T> {
public:
  C(T* sometype) { /*...*/ }
};

另请注意,您对标识符sometype的使用不一致。在P的情况下,您将其用作变量名称,在C中,它是一个类型名称,但是尚未声明的名称。

另一个问题是C的构造函数将如何处理sometype对象。我怀疑它确实会完成P的构造函数所做的事情,因为无论如何你需要调用基类的构造函数,C构造函数的实现很可能如下所示:

template <typename T>
class C : public P<T> {
public:
  C(T* sometype):P<T>(sometype) { }
};

最后一点:C ++ 11实际上提供了构造函数继承作为一项功能。由于您对使用C ++ 11功能不感兴趣(虽然确实很遗憾),并且由于许多编译器尚未实现该功能,因此我不会详细介绍。对要素定义的引用为here

答案 1 :(得分:1)

如果您需要通过子类型指定基类 type T,请尝试以下操作:

template<typename T>
class C : public P<T> {
  public:
    C(T* pT): P(pT) {}
}

int* pMyInt;
C<int> myClass(mMyInt);

答案 2 :(得分:0)

你应该编写一个C的构造函数,它接受相同的参数并将它传递给它的父类,如下所示:

C(T* sometype)
    : P(sometype)
{
}

答案 3 :(得分:0)

  

现在C会隐藏P(sometype *)构造函数吗?

是的,在C不继承P的构造函数的意义上。因此C将不允许该类用户使用父类的构造函数。

  

但我需要在C

中使用P(ometype *)结构

这是可能的:你只需直接调用它:

P::P(sometype*)