#include struct Base { int convert(int) const { return 1; } virtual int value(int n = 1) const { return n; } virtual ~Base() = default; }; struct Derived : Base { using Base::convert; int convert(double) const { return 2; } int value(int n = 2) const override { return n * 10; } }; int main() { Derived d; const Base& b = d; assert(d.convert(3) == 1); assert(d.convert(3.5) == 2); assert(b.value() == 10); assert(d.value() == 20); assert(d.Base::value() == 1); }