Объект производного класса, переданный значением, чтобы функционировать параметром базового класса
Этот дефект происходит, когда вы передаете объект производного класса значением к функции, но функция ожидает объект базового класса как параметр.
Если вы передадите объект производного класса значением к функции, вы ожидаете, что производный класс копирует конструктора, чтобы быть названным. Если функция ожидает объект базового класса как параметр:
Конструктор копии базового класса называется.
В теле функции параметр рассматривается как объект базового класса.
На C++, virtual методы класса разрешены во время выполнения согласно фактическому типу объекта. Из-за объектного разрезания, неправильной реализации virtual метод может быть назван. Например, базовый класс содержит virtual метод и производный класс содержат реализацию того метода. Когда вы вызываете virtual метод от тела функции, метод базового класса называется, даже при том, что вы передаете объект производного класса функции.
Одна возможная фиксация должна передать объект ссылкой или указателем. Передача ссылкой или указателем не вызывает вызов конструкторов копии. Если вы не хотите, чтобы объект был изменен, используйте const спецификатор с вашим параметром функции.
Другой возможная фиксация должна перегрузить функцию с другой функцией, которая принимает объект производного класса как параметр.
| Группа: Объектно-ориентированный |
| Язык: C++ |
| Значение по умолчанию: На для рукописного кода, прочь для сгенерированного кода |
Синтаксис командной строки: OBJECT_SLICING |
| Удар: высоко |