2012-03-24 118 views
9

如何實例化派生類對象,其基類ctor是私有的?實例化派生類對象,其基類ctor是私人的

由於派生類ctor隱式調用基類ctor(它是私有的),編譯器會給出錯誤。

考慮下面這個例子代碼:

#include <iostream> 

using namespace std; 

class base 
{ 
    private: 
     base() 
     { 
     cout << "base: ctor()\n"; 
     } 
}; 

class derived: public base 
{ 
    public: 
     derived() 
     { 
     cout << "derived: ctor()\n"; 
     } 
}; 

int main() 
{ 
    derived d; 
} 

此代碼給編譯錯誤:

accessing_private_ctor_in_base_class.cpp: In constructor derived::derived()': accessing_private_ctor_in_base_class.cpp:9: error: base::base()' is private accessing_private_ctor_in_base_class.cpp:18: error: within this context

我如何修改代碼以刪除編譯錯誤?

回答

14

有兩種方式:

  • 讓基類的構造或者publicprotected
  • 或者,使派生類成爲基類的friend。見demo
+1

@ Nawaz:讓派生類成爲基類的朋友! – 2012-03-24 12:18:23

1

你不能。這通常是唯一的c'tor私有的原因,不允許繼承。

+0

單身人士也有這方面的用途。 – chris 2012-03-24 13:25:42

2

您不能從其唯一的構造函數是私有的基類繼承。

因此,使基類構造函數爲public/protected,或者添加另一個基類構造函數。


1.除非像納瓦茲指出的那樣,你是基類的朋友。

相關問題