У мене виникло це питання, коли я отримав коментар з огляду коду, в якому говорилося, що віртуальним функціям не потрібно вбудовувати вбудовані.
Я думав, що вбудовані віртуальні функції можуть стати в нагоді в сценаріях, коли функції викликаються безпосередньо на об'єктах. Але мені прийшов контр-аргумент - чому б хотілося визначити віртуальний, а потім використовувати об’єкти для виклику методів?
Краще не використовувати вбудовані віртуальні функції, оскільки вони майже ніколи не розширюються?
Фрагмент коду, який я використовував для аналізу:
class Temp
{
public:
virtual ~Temp()
{
}
virtual void myVirtualFunction() const
{
cout<<"Temp::myVirtualFunction"<<endl;
}
};
class TempDerived : public Temp
{
public:
void myVirtualFunction() const
{
cout<<"TempDerived::myVirtualFunction"<<endl;
}
};
int main(void)
{
TempDerived aDerivedObj;
//Compiler thinks it's safe to expand the virtual functions
aDerivedObj.myVirtualFunction();
//type of object Temp points to is always known;
//does compiler still expand virtual functions?
//I doubt compiler would be this much intelligent!
Temp* pTemp = &aDerivedObj;
pTemp->myVirtualFunction();
return 0;
}
pTemp->myVirtualFunction()
може бути вирішено як невіртуальний виклик, він може мати вбудований виклик. Цей посилається на дзвінок позначається г ++ 3.4.2: TempDerived & pTemp = aDerivedObj; pTemp.myVirtualFunction();
Ваш код - ні.