Ваше предположение, что чисто виртуальная функция не может быть вызвана, абсолютно неверно.Когда функция объявляется чисто виртуальной, это просто означает, что эта функция не может быть вызвана динамически через механизм виртуальной диспетчеризации.Тем не менее, эту же самую функцию можно легко назвать статически , не виртуально , напрямую (без виртуальной отправки).
На языке C ++ не виртуальный вызов виртуальной функции выполняется, когда в вызове используется квалифицированное имя функции, т.е. когда имя функции, указанное в вызове, имеет форму <class name>::<function name>
.
Например
struct S
{
virtual void foo() = 0;
};
void S::foo()
{
// body for pure virtual function `S::foo`
}
struct D : S
{
void foo()
{
S::foo();
// Non-virtual call to `S::foo` from derived class
this->S::foo();
// Alternative syntax to perform the same non-virtual call
// to `S::foo` from derived class
}
};
int main()
{
D d;
d.S::foo();
// Another non-virtual call to `S::foo`
}