[英]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*)
構造函數嗎? 但我需要在C
使用P(ometype*)
構造函數。 我是否需要編寫另一個調用父構造函數的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
不會讓類的用戶可以使用父類的構造函數。
但我需要在C中使用P(ometype *)結構
這是可能的:你只需直接調用它:
P::P(sometype*)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.