0
A
回答
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);
}
相關問題
- 1. 將指針基類轉換爲指向派生類的指針
- 2. 將基類指針轉換爲未知的派生類指針
- 3. 爲什麼C++允許轉換指針基本對象爲指針的派生類的
- 4. 無法從指針轉換爲基類指針指向派生
- 5. 將指針轉換爲基礎對象轉換爲派生類的指針
- 6. 派生類和基類之間指針指針的轉換?
- 7. 無法將參數1從派生指針轉換爲基類指針參考
- 8. C++ dynamic_cast基類指向派生類指針的指針
- 9. 在目標c中指派派生類的基類指針
- 10. C++刪除派生類被分配給所述基類的指針的指針
- 11. 派生類的基指針
- 12. C++將指針從一個派生類轉換爲另一個
- 13. 爲什麼使用派生類的基類指針
- 14. C++派生類的劇組成員指針到基類指針
- 15. C++ - 基類指針,方法指針,引用派生類,方法?
- 16. 將指針派生類成員變量轉換爲指向基類成員變量的指針是否合法?
- 17. 派生指針只能添加方法時將基指針轉換爲派生指針的有效性
- 18. 可以將派生類的指針類型轉換爲其基類的指針嗎?
- 19. 自動轉換指針列表派生類的指針列表基類
- 20. 將指針C#類型轉換爲F#?
- 21. 爲什麼我不能將指向派生類成員函數的指針轉換爲相同的Base類?
- 22. 何時使用派生類指針和基類指針
- 23. 指向派生類C++的指針
- 24. 爲什麼在Java中將顏色描述爲指針?
- 25. ARC不允許將Objective-C指針隱式轉換爲「const char *」?
- 26. 指向基地,轉換爲派生指針
- 27. 不允許將非Objective-C指針類型「SEL」隱式轉換爲「NSString * _Nonnull」ARC
- 28. 通過基指針獲取派生類?
- 29. 如何將ArrayList轉換爲指向JNI中指針的指針,以及如何將C++類轉換爲jobject?
- 30. 爲什麼允許通過基類指針調用派生類的私有虛方法?
如果基類沒有vtable(沒有虛函數)但是派生類可以失敗,因爲指向基的指針與派生指針的地址不是相同的地址。它也因多個基礎類型而變得複雜。 – odinthenerd