【发布时间】:2023-03-16 09:34:01
【问题描述】:
抱歉标题太复杂了。我有这样的事情:
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 中)?老实说,我希望这段代码不会编译,但它确实编译了,但它并没有给我我需要的结果。这有可能吗?
【问题讨论】:
标签: c++ visual-studio-2005 initialization polymorphism virtual