对于复杂的标题很抱歉。我有这样的事情:使用子类对象初始化的多态基类对象的数组
class Base
{
public:
int SomeMember;
Base() : SomeMember(42) {}
virtual int Get() { return SomeMember; }
};
class ChildA : public Base
{
public:
virtual int Get() { return SomeMember*2; }
};
class ChildB : public Base
{
public:
virtual int Get() { return SomeMember/2; }
};
class ChildC : public Base
{
public:
virtual int Get() { return SomeMember+2; }
};
Base ar[] = { ChildA(), ChildB(), ChildC() };
for (int i=0; i<sizeof(ar)/sizeof(Base); i++)
{
Base* ptr = &ar[i];
printf("El %i: %i\n", i, ptr->Get());
}
,输出:
El 0: 42
El 1: 42
El 2: 42
这是正确的行为(在VC++ 2005)?说实话,我希望这个代码不要编译,但是它确实,但是它并没有给我我需要的结果。这是可能吗?
*对象切片*,因为它是已知的。 – john
因此,它复制对象而不复制它们的VTables? – GhassanPL
@Kronikarz:它通过将其他类的内容复制到它们来初始化类Derived的对象。当然,它不会复制vtables - 它们是不可变的。 – sharptooth