我有一个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
功能。
我有一个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
功能。
是的,构造函数不是继承的。你需要写一个新的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 功能不感兴趣(虽然这确实很遗憾),并且由于许多编译器尚未实现该功能,所以我不会详细介绍。对特征定义的参考在这里。
如果您需要通过子类型指定基类 ,请尝试以下操作:type T
template<typename T>
class C : public P<T> {
public:
C(T* pT): P(pT) {}
}
int* pMyInt;
C<int> myClass(mMyInt);
您应该编写一个 C 的构造函数,它采用相同的参数并将其传递给其父类,如下所示:
C(T* sometype)
: P(sometype)
{
}
现在 C 会隐藏 P(sometype*) 构造函数吗?
是的,在C
不继承 P 的构造函数的意义上。所以C
不会有父类的构造函数可供类的用户使用。
但我需要 P(ometype*) 构造函数在 C 中可用
这是可能的:您只需直接调用它:
P::P(sometype*)