2014-06-07 38 views
-4

我是C++中的新成員。我不知道爲什麼我們無法創建派生類參考。在派生類中,基本的所有特性都會在這種情況下得到解決,那麼爲什麼......請幫助我確切的理由。如果這是重複的請與我分享確切的鏈接。爲什麼我們不在虛擬的情況下創建派生類參考

#include<iostream> 
using namespace std; 
struct A 
{ 
    virtual void get() 
    { 
    cout<<"I am in Base"<<endl; 
    } 
}; 

struct B:A 
{ 
    virtual void get() 
    { 
    cout<<"I am in Derived"<<endl; 
    } 
}; 

int main() 
{ 
    B*ptr = new A(); // virtual.cpp:21: error: invalid conversion from A* to B* 
    ptr->get(); 
    return 0; 
} 
+2

因爲'A'不是'B'。 –

+1

您不能進行隱式向下轉換。假裝一個'A'是一個'B'是一個壞主意。即使當'A'開始爲'B'時也可以避免。 – chris

+0

A * ptr = new B()可能是正確的。請你詳細解釋一下 – user2390140

回答

0
  1. 你要分配到的不是一個參考,但一個指針。
  2. B源自A,所以BA。但是A不是B。因此A*ptr=new B;是允許的,但不是你想要的。
  3. 假設B*ptr=new A;是可能的。如果B包含A不具有的數據成員,則 將A解釋爲B是沒有意義的,嘗試訪問這些成員最多會導致崩潰。

順便說一句,這不是一個C++教程網站。我建議閱讀一本初學者的書。

相關問題