如果我有一个基类,其中只有虚拟方法和来自 的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