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