Всякий раз, когда вы вызываете функцию-член через объект конкретного типа (т.е. без указателя), статический тип известен, поэтому компилятор разрешает правильную функцию во время компиляции.Единственный раз, когда виртуальные функции разрешаются во время выполнения, это когда вы вызываете их по указателю на объект, используя полиморфизм.
В вашем примере вызовы show () выполняются через указатель this и впоследствииони будут решены во время выполнения.Учтите, что всегда может быть класс, даже дальше по цепочке наследования, который реализует show ().
Явно квалифицированный вызов obj.Base :: show () явно разрешается во время компиляции.