c ++: ошибка C2440: «<функция-стиль-приведение>»: невозможно преобразовать из «A <TYPE>» в «B <TYPE>» - PullRequest
1 голос
/ 30 сентября 2011

У меня есть базовый класс A, и у него есть подкласс B. A переопределяет оператор +, а B также переопределяет его, вызывает оператор + родителя и приводит результат к B. Затем я получаю сообщение об ошибке:

ошибка C2440: '': невозможно преобразовать из 'A' до 'B'

Я думал, что полиморфизм работает таким образом, чтобы это работало?

1 Ответ

8 голосов
/ 30 сентября 2011

В полиморфизме вы не можете конвертировать A в B, вы можете конвертировать B в A. B является разновидностью A, но A НЕ является разновидностью B.

Например, в классических классах Shape. Если у вас есть класс Shape и класс Rectangle, который расширяет [наследовать от] Shape, вы не можете преобразовать экземпляр Shape в Rectangle, но можете МОЖЕТ привести Rectangle к Shape, потому что это «своего рода» форма.

...