Массив полиморфных объектов базового класса, инициализированный объектами дочернего класса.

Извините за сложное название. У меня что-то вроде этого:

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)? Честно говоря, я ожидал, что этот код не будет компилироваться, но это произошло, однако он не дал мне нужных мне результатов. Возможно ли это вообще?

6
задан Bo Persson 26 August 2011 в 11:15
поделиться