Site Tools


wiki:cpp-name-hiding

Table of Contents

C++ Name hiding

Name hiding 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.

// compile: g++ -o hiding hiding.cpp
// run: ./hiding
// description: name hiding in derived classes and how 'using' fixes it
 
#include <iostream>
 
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;
}
wiki/cpp-name-hiding.md · Last modified: (external edit)