# C++ Name hiding **[Name hiding](https://en.cppreference.com/w/cpp/language/lookup)** occurs when a derived class member function has the same name as a base class member function but different parameters. The derived function hides all base functions with that name, even overloads, making them inaccessible through the derived object unless explicitly qualified. Use `using` to bring base class overloads into the derived scope, or use virtual functions for polymorphic behavior. ## Example This example shows name hiding making base overloads inaccessible and how using fixes it. ```cpp // compile: g++ -o hiding hiding.cpp // run: ./hiding // description: name hiding in derived classes and how 'using' fixes it #include class Base { public: void func(int x) { std::cout << "Base::func(int)\n"; } }; class DerivedBad : public Base { public: void func(double x) { std::cout << "DerivedBad::func(double)\n"; } // Base::func(int) is hidden }; class DerivedGood : public Base { public: using Base::func; // bring base overloads into scope void func(double x) { std::cout << "DerivedGood::func(double)\n"; } }; int main() { DerivedBad db; // db.func(42); // error: hidden by derived func(double) DerivedGood dg; dg.func(42); // OK: Base::func(int) visible dg.func(3.14); // OK: DerivedGood::func(double) return 0; } ```