我有一个继承课程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
功能。
答案 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*)