子类隐藏父类的构造函数
child class hides parent class's constructor
我有一个继承类P
的类C
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
的构造函数所做的那样,而且由于您无论如何都需要调用基类的构造函数,因此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*)concstructor在C 中可用
这是可能的:你只需直接称之为:
P::P(sometype*)
相关文章:
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 参数包构造函数在类模板中隐藏用户定义的转换
- 具有已删除移动和复制构造函数的类的就地构造
- 创建一个没有复制构造函数的类的 std::vector 的 std::vector
- C++构造函数和类?
- 在 C++ 中,默认情况下构造函数为类的数据成员提供的值是多少?
- 如何在其他类中使用参数化构造函数制作类的对象?
- 具有值包装器的可变参数模板构造函数的类构造函数优先级
- 如何使用私有构造函数对类进行单元测试?
- c++17在编译时将带有已删除复制构造函数的类添加到std::vector
- 从作为模板参数传递给构造函数的类继承,或者从它们继承
- 继承的构造函数忽略类内初始化
- 模板和隐式构造函数的类定义之外的友元声明
- 具有字符串文本构造函数的类不适用于 const 引用初始化
- C++ - 从另一个类构造函数调用类构造函数
- 定义结构中没有默认构造函数的类
- 我可以将 std::move 与不提供 move 构造函数的类一起使用吗?
- 是否可以默认初始化具有已删除默认构造函数的类类型
- C++具有移动和复制构造函数的类中的代码重复
- 在C++中,如何测试对象是否是父类构造函数中子类的实例?