C++ 子类隐藏父类';s构造函数

C++ 子类隐藏父类';s构造函数,c++,inheritance,C++,Inheritance,我有一个类C,它继承了类p template <typename T> class P{ public: P(); P(T* sometype); }; class C: public P<sometype>{ }; 模板 P类{ 公众: P(); P(T*sometype); }; 丙级:公共体育{ }; 现在Chidep(sometype*)constructor?但是我需要P(ometype*)构造函数在C中可用。我是否需要编写另一个调用父构造函

我有一个类
C
,它继承了类
p

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

class C: public P<sometype>{

};
模板
P类{
公众:
P();
P(T*sometype);
};
丙级:公共体育{
};

现在
C
hide
p(sometype*)
constructor?但是我需要
P(ometype*)
构造函数在
C
中可用。我是否需要编写另一个调用父构造函数的
C(sometype*)
?或者有一些简单的突破。我不知道;我不想使用
C++11
功能

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

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

int* pMyInt;
C<int> myClass(mMyInt);
模板
丙级:公共体育{
公众:
C(T*pT):P(pT){}
}
int*pMyInt;
C myClass(百万吨级);

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

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

int* pMyInt;
C<int> myClass(mMyInt);
模板
丙级:公共体育{
公众:
C(T*pT):P(pT){}
}
int*pMyInt;
C myClass(百万吨级);

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

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

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

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

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

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

最后一句话:C++11实际上提供了构造函数继承功能。由于您对使用C++11特性不感兴趣(这确实是一个遗憾),而且由于该特性还没有被许多编译器实现,我将不详细介绍。对要素定义的引用是。

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

template <typename T>
class C : public P<T> {
public:
  C(T* sometype) { /*...*/ }
};
最后一句话:C++11实际上提供了构造函数继承功能。由于您对使用C++11特性不感兴趣(这确实是一个遗憾),而且由于该特性还没有被许多编译器实现,我将不详细介绍。对特征定义的引用为

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

是的,在某种意义上,
C
不继承p的构造函数。因此,
C
将不会有父类的构造函数可供该类的用户使用

但我需要p(ometype*)constructor在C中可用

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

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

是的,在某种意义上,
C
不继承p的构造函数。因此,
C
将不会有父类的构造函数可供该类的用户使用

但我需要p(ometype*)constructor在C中可用

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

P::P(sometype*)

将C视为模板有什么好处?将C视为模板允许您在构建C对象时指定基类中T的类型如果您有输入错误,则应为
class C:public P{
将C视为模板有什么好处?将C视为模板允许您在构造C对象时指定基类中T的类型如果您有输入错误,则应为
类C:public P{
是否存在从父类中提取构造函数的using关键字?@DiproSen是的,但仅在C++11中。请参阅。是否存在从父类中提取构造函数的using关键字?@DiproSen是的,但仅在C++11中。请参阅。父类构造函数创建父对象。在子类中继承它没有意义:它的co构造函数显然应该创建一个子对象。不过,父类构造函数可用于在子对象内创建父对象。虽然不是完全重复,但非常接近:在C++03中,如果不在C中创建一个将手动转发调用的构造函数,则无法完成此操作;在C++11中,您可以继承父类构造函数类构造函数创建父对象。在子类中继承父对象没有意义:它的构造函数显然应该创建子对象。但是,父类构造函数可以在子对象中创建父对象。不是完全重复,但非常接近:在C++03中,如果不创建构造函数,这是无法完成的或者在将手动转发调用的C中,在C++11中,您可以继承构造函数