Object Slicing เกิดเมื่อ assign object ของ derived class ให้กับ instance ของ base class (by value) สูญเสีย members/methods ของ derived class
ตัวอย่าง
class Foo { int a; };
class Bar : public Foo { int b; }; // Bar มี a และ b
Bar bar;
Foo foo = bar; // Object slicing! foo มีแค่ a, b ถูก slice ทิ้ง
foo ได้แค่ส่วน Foo ของ bar สมาชิก b หายไป เรียกว่า member slicing
ป้องกัน
- ใช้ pointer หรือ reference แทน value:
Foo* foo = &bar;หรือFoo& foo = bar; - ทำ base class เป็น abstract (มี pure virtual) ไม่ให้สร้าง instance ได้
- ลบ copy constructor/assignment operator ของ base class (
=delete)
Java: ไม่มี object slicing เพราะ object ทุกตัวเป็น reference semantics (เก็บ reference ไม่ใช่ value)