Здесь есть несколько проблем, не рассмотренных в данном ответе :
- Вы присваиваете объекты Cow
, Pig
и Snake
массиву Animal
объекты.Это может вызвать обрезку объектов .
- Даже если функция talk()
имеет значение virtual
в классе Animal
, она не будет делать то, что вы ожидаете, потому что вы ее не вызываетеполиморфно.Вы по-прежнему будете называть talk()
Объекта Животного.
Итак, вам нужен массив (или лучше vector
) указателей на Animal
объект.Затем вы можете назначить ему адреса различных животных объектов.
Animal* arya[4];
Animal animalObj;
Cow cowObj;
Pig pigObj;
Snake snakeObj;
arya[0] = &animalObj;
arya[1] = &cowObj;
arya[2] = &pigObj;
arya[3] = &snakeObj;
Затем вы можете вызвать функцию talk()
, подобную этой, что приведет к полиморфности вызова:
for(int x= 0; x < 4; x++)
{
arya[x]->talk();
}
См. Демо здесь .