如果我有一個基類,其中只有虛擬方法和來自 的2個派生類,並且實現了這些虛方法。指向基類數組的指針,使用派生類填充
我如何:
// causes C2259
BaseClass* base = new BaseClass[2];
BaseClass[0] = new FirstDerivedClass;
BaseClass[1] = new SecondDerivedClass;
或:
// causes "base is being used without being initialized"
BaseClass* base;
// causes CC59 again
BaseClass* base = new BaseClass;
base[0] = FirstDerivedClass();
base[1] = SecondDerivedClass();
(或類似的東西)
...所以,我可以通過DerivedClass
訪問BaseClass
小號方法, 但通過指針和指針是一個數組DerivedClass
s?
這個被稱爲「對象分片」的問題並不特定於數組 - 它隨時都會通過值*將派生類分配給基類*。例如。 'BaseClass b; b = FirstDerivedClass();'是可編譯的C++,但仍然默默地破解(最好你可能會得到一個編譯器警告)。 –
鏈接似乎被移動。 – user6003859
@ user6003859我更新了它,感謝您的發現! – Jon