Почему я не могу сделать полиморфизм с нормальными переменными?
Я программист на Java и недавно начал изучать C ++. Я чем-то смущен.
Я понимаю, что в C ++ для достижения полиморфного поведения вы должны использовать либо указатели, либо ссылки. Например, рассмотрим классShape
с реализованным методомgetArea()
, У него есть несколько подклассов, каждый переопределяет getArea () по-своему. Чем рассмотреть следующую функцию:
void printArea(Shape* shape){
cout << shape->getArea();
}
Функция вызывает правильныйgetArea()
реализация, основанная на конкретномShape
указатель указывает на.
Это работает так же:
void printArea(Shape& shape){
cout << shape.getArea();
}
Однако следующий метод не работает полиморфно:
void printArea(Shape shape){
cout << shape.getArea();
}
Не имеет значения, какой конкретный видShape
передается в функции, то же самоеgetArea()
реализация называется: по умолчанию вShape
.
Я хочу понять технические причины этого. Почему полиморфизм работает с указателями и ссылками, но не с нормальными переменными? (И я полагаю, что это верно не только для параметров функции, но и для чего угодно).
Пожалуйста, объясните технические причины такого поведения, чтобы помочь мне понять.