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

การซ่อน Overloaded Methods ของ Base Class ใน C++

ใน 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() { ... }
};