1

我有一个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

4 回答 4

3

是的,构造函数不是继承的。你需要写一个新的C

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

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

另一个问题是构造函数C要对sometype对象做什么。我怀疑它会完全按照P's 的构造函数所做的那样做,并且由于无论如何您都需要调用基类的构造函数,因此构造函数的实现C很可能如下所示:

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

最后一点:C++11 实际上提供了构造函数继承作为一个特性。由于您对使用 C++11 功能不感兴趣(虽然这确实很遗憾),并且由于许多编译器尚未实现该功能,所以我不会详细介绍。对特征定义的参考在这里

于 2012-08-20T11:32:28.493 回答
1

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

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

int* pMyInt;
C<int> myClass(mMyInt);
于 2012-08-20T11:30:12.833 回答
0

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

C(T* sometype)
    : P(sometype)
{
}
于 2012-08-20T11:30:24.853 回答
0

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

是的,在C不继承 P 的构造函数的意义上。所以C不会有父类的构造函数可供类的用户使用。

但我需要 P(ometype*) 构造函数在 C 中可用

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

P::P(sometype*)
于 2012-08-20T11:32:28.767 回答