Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Object Slicing ใน C++ (และ Java) คืออะไร


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)