2014-03-27 35 views
0

在回答this question,我注意到類似如下:子對象

class A 
{ 
    public: 
    A(); 
    void foo(); 
}; 

class B: public A 
{ 
    public: 
    B(); 
}; 

void A::foo() 
{ 
    B bar; 

    //more code 
} 

直覺上,我想說這不能做,但我不知道。不管它是否是一個好主意,是否有人知道它是否是非法的(以及爲什麼)?

編輯:我衝過了這個例子,我編輯了代碼,所以構造函數是公開的。

+0

我看不出爲什麼它不能完成,它[編譯好](http://ideone.com/IaOJlY)。 –

+0

對不起,固定鏈接 – user3288829

+0

你不能說「無恥」,並假裝你是認真的。 –

回答

0

是什麼讓你覺得它不能做?你給的例子是無效的,因爲構造函數是私有的。但是在製作AB結構之後,它可以很好地工作(示例here)。沒有規則說基類函數不能有派生類對象。

0

對於爲什麼它看起來不能完成,你有一些直覺,我認爲這是一個好兆頭。當基類使用派生類時,這兩個類是相互依賴的。這是一種經常遇到但值得嘗試避免的模式。編譯器當然不會抱怨相互依賴的類。