Nếu lớp dẫn xuất định nghĩa lại một hàm nạp chồng từ lớp cơ sở, tất cả các overload khác của hàm đó sẽ bị ẩn (hidden) khỏi lớp dẫn xuất.
Ví dụ
#include <iostream>
using namespace std;
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"; } // chỉ định nghĩa lại overload không đối số
};
int main() {
Derived d;
d.func(); // OK: gọi Derived::func()
d.func(10); // LỖI COMPILE: Base::func(int) bị ẩn
}Lỗi biên dịch
error: no matching function for call to 'Derived::func(int)' note: candidate: void Derived::func() expects 0 arguments, 1 provided
Giải pháp
Dùng using Base::func; trong lớp dẫn xuất để đưa các overload vào scope.