2012-11-19 64 views

回答

1

您的派生類可能會定義新的方法和屬性,這些方法和屬性在您的基類中是未知的。 Java & Co會在這種情況下拋出異常。

在C++中,您可能(但很少應該)通過靜態轉換將指針指向派生類的基類。如果原始指針指向基類或其他派生類的對象,那麼會發生什麼情況是未定義的。

查看Vlad Lazarenko的awnser如何做到這一點。

1

很難描述爲什麼這是不允許的,因爲它實際上是非常容許的。

#include <cstdio> 

struct Base { 
    int b; 
    explicit Base(int b) : b(b) {} 
}; 

struct Derived : Base { 
    int d; 
    explicit Derived(int d) : Base(d), d(d+1) {} 
}; 

int main() 
{ 
    Derived d(10); 
    Base *b = &d; 
    Derived *d2 = static_cast<Derived *>(b); 

    printf("%d, %d\n", b->b, d2->d); 
} 
+0

如果基類沒有vtable(沒有虛函數)但是派生類可以失敗,因爲指向基的指針與派生指針的地址不是相同的地址。它也因多個基礎類型而變得複雜。 – odinthenerd

相關問題