ใน C++ หาก Derived class override overload หนึ่งฟังก์ชันของ Base class ทุก overload อื่นของฟังก์ชันชื่อเดียวกันจะถูกซ่อน (hidden) ไม่สามารถเรียกผ่าน Derived class ได้
ตัวอย่าง
class Base {
public:
void func() { cout << "Base::func()\n"; }
void func(int x) { cout << "Base::func(int)\n"; }
};
class Derived : public Base {
public:
void func() { cout << "Derived::func()\n"; } // ซ่อน Base::func(int) ด้วย
};
int main() {
Derived d;
d.func(); // OK: Derived::func()
d.func(10); // ERROR: ไม่หา Base::func(int) ได้
}
วิธีแก้
ใช้ using Base::func; ใน Derived class เพื่อนำ overload ทั้งหมดมาสู่ scope
class Derived : public Base {
public:
using Base::func; // นำ overload ทั้งหมดมา
void func() { ... }
};