// Example 5-13: Overloading inherited functions.
#include <iostream>
#include <ostream>

class base {
public:
  void f(int) { std::cout << "f(int)\n"; }
  void g(int) { std::cout << "g(int)\n"; }

};

class derived : public base {
public:
  void f(double) { std::cout << "f(double)\n"; }
  void g(double) { std::cout << "g(double)\n"; }
  using base::g; // g(int) and g(double) are visible
};

int main()
{
  derived d;

  d.f(3);   // calls derived::f(double)
  d.g(42);  // calls base::g(int)
}
