2014-10-10 185 views
-4

我寫了下面的代碼,我在這裏創建了一個基類指針,指向派生類類型的一個對象。我可以使用箭頭運算符訪問從基類繼承的成員。但每當我嘗試訪問派生類中定義的成員我錯了。代碼是指向派生類對象的基類指針可以訪問在派生類中聲明的新成員嗎?

#include<iostream> 
using namespace std; 

struct A {}; 

struct B: A 
{ 
    int b; 
    B() : b(5) {} 
}; 

int main() 
{ 
    B y; 
    A *ptr=&y; 
    cout<<ptr->b<<endl; 
} 
+1

如果您遇到錯誤,請發佈錯誤消息。 – 2014-10-10 16:40:51

+1

答案是肯定的,帶有成員對象指針。但不是直接的,你說它是一個'A',而'A'不是'B'(編譯器應該怎麼知道呢?)。 – Deduplicator 2014-10-10 16:42:40

回答

0

不,它不會能夠訪問派生類中聲明的成員。 當您編寫ptr-> b時,編譯器在類A中查找成員b,因爲指針是類A *,並且A沒有名爲b的成員,因此導致錯誤。

編譯器不知道指針可能在運行時指向哪個對象。

相關問題