Я уже читал Являются ли встроенные виртуальные функции действительно бессмысленными?. Но у меня все еще есть некоторые сомнения, и я не нашел ответа.
Говорят, что если ситуация не является двусмысленной, компилятор должен включить виртуальную функцию.
Однако:
Это может произойти только тогда, когда у компилятора есть фактический объект, а не указатель или ссылка на объект.
Итак, что, если у меня есть класс B, полученный из A one (который содержит функцию virtual void doSth()), и я использую указатель B*, а не A*:
B* b = new B;
b->doSth();
- Предположим, что
Bне имеет дочерних классов. Это довольно очевидно (во время компиляции), какую функцию следует вызывать. Таким образом, можно быть встроенным. Это на самом деле? - Предположим, что
Bимеет несколько дочерних классов, но эти классы не имеют собственной функцииdoSth(). Поэтому компилятор должен "знать", что единственная функция для вызова -B::doSth(). Я предполагаю, что он не включен, хотя?