2014-01-07 102 views
1

可以說你有一個基類基地和派生類派生請讓我明白分配派生類對象到基類指針 - C++

Base b; 
Derived *d; 
d=&b; // this line gives error, why? I think it asks for typecasting, why? 
//When you assign derived class object address to base class pointer, it works fine. Why not the above case works fine 

雖然下面的代碼工作,

Derived *d=new Base(); //no typecasting required here, why? 

什麼是上述兩種情況的區別?

謝謝!

+0

「我想它會要求輸入」編譯代碼時得到的* actual *錯誤是什麼? –

+0

錯誤:類型Base的值不能分配給派生類型的實體。我知道,我們需要類型轉換。怎麼樣?爲什麼? – CODError

+4

什麼編譯器能得到第二個例子「工作」?因爲它不應該。 – juanchopanza

回答

6

Base是 - 不一個Derived,所以這也不:

Base b; 
Derived *d; 
d=&b; 

也不是這:

Derived* d = new Base(); 

使任何意義或作品。兩者會產生類似

error: invalid conversion from 'Base*' to 'Derived*' [-fpermissive]

雙方都在做同樣的事情:分配Base*Derived*

+0

如何將派生類對象分配給基類? – CODError

+0

@SmaugTheDragon:這種方式,指針或引用轉換是安全的,所以它可以隱式完成,例如, 'Base * b = new Derived;' –

相關問題